首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-03-21 
图的邻接矩阵构造,求教大神本帖最后由 lastyearing 于 2013-03-19 09:58:36 编辑/** * *通过用户交互产生

图的邻接矩阵构造,求教大神
本帖最后由 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",&amp;n,&amp;e);
scanf("%c",&amp;gra.vexs[i].data); //输入顶点信息
假定你输入4 5<cr>
那么<cr>导致4和5被正确的扫描到,但是<cr>本身还在流里面,会被第二个scanf的%c当成输入而被扫描,进而赋值到gra.vexs[0].data中,……

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

热点排行