读书人

图的邻接矩阵结构求教大神

发布时间: 2013-03-21 10:08:17 作者: rapoo

图的邻接矩阵构造,求教大神
本帖最后由 lastyearing 于 2013-03-19 09:58:36 编辑


/**
*
*通过用户交互产生一个有向图的邻接矩阵
*
**/

#include<stdio.h>
#include<stdlib.h>

#define MAX 20 //定义常量

struct vertex{ //顶点结构定义
int num; //顶点序号
char data; //顶点信息
};

typedef struct gragh{ //图结构定义
int n; //顶点数
int e; //边数
struct vertex vexs[MAX]; //顶点数组
int edges[MAX][MAX]; //边矩阵
}Gragh;

Gragh createmgragh() //交互式创建一个图的邻接矩阵
{
int i=0,j=0,k=0,w=0,n=0,e=0;
char b=NULL,t=NULL;
Gragh gra;

printf("请输入顶点数(n)和边数(e):"); //输入顶点数和边数
scanf("%d %d",&n,&e);

gra.n=n;
gra.e=e;

for(i=0;i<n;i++) //循环输入每个顶点的序号及信息
{
printf("第%d个顶点的信息:",i);
scanf("%c",&gra.vexs[i].data); //输入顶点信息
gra.vexs[i].num=i; //赋值顶点序号
}

for(i=0;i<n;i++) //每个边赋权值为0
{
for(j=0;j<n;j++)
gra.edges[i][j]=0;
}

for(k=0;k<e;k++) //输入边的信息
{
printf("第%d条边的信息:",k+1);

printf("起点:"); //输入起点
scanf("%d",&b);

printf("终点:"); //输入终点
scanf("%d",&t);

printf("权值:"); //输入权值
scanf("%d",&w);

i=0;
while(i<n&&gra.vexs[i].data!=b) //查找起点的序号
i++;

if(i>n)
{
printf("起点不存在!\n");
}

j=0;
while(j<n&&gra.vexs[j].data!=b) //查找终点的序号
j++;

if(j>n)
{
printf("终点不存在!\n");
}

gra.edges[i][j]=w; //给边赋权值
}

return gra;
}

void main() //主函数
{
Gragh gra;

gra=createmgragh();
}



通过与用户交互产生一个图的邻接矩阵,在红色处一次会打印两条语句,望高手解释下,谢谢!
[解决办法]
注意回车空格等符号的吸收。

[解决办法]
引用:
拿程序最开始的两个scanf来讲:
scanf("%d %d",&n,&e);
scanf("%c",&gra.vexs[i].data); //输入顶点信息
假定你输入4 5<cr>
那么<cr>导致4和5被正确的扫描到,但是<cr>本身还在流里面,会被第二个scanf的%c当成输入而被扫描,进而赋值到gra.vexs[0].data中,……

他说的很清楚了。
至于楼主是否理解什么是流,和缓冲区,baidu,google,一下,或者看文件那一章节

读书人网 >C语言

热点推荐