图的邻接矩阵储存算法问题

Mathew_Lewis 2018-05-06 01:56:36

#include<stdlib.h>
#include<string.h>


/********************************图的存储结构定义***********************/
#define MaxVerNum 30
#define Vextype char
#define EdgeInfoType int

#define INF 999 //无穷大
#define MAXSIZE 100

typedef struct
{
Vextype vexs[MaxVerNum];
EdgeInfoType edges[MaxVerNum][MaxVerNum];
int n,e;
}MGragh;



int visited[MaxVerNum]; //顶点访问标记

void CreateGraph(MGragh *g)
{
int i,j,k,w;
printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");
scanf("%d,%d",&(g->n),&(g->e));
printf("请输入顶点信息(输入格式为:顶点号):\n");
for(i=0;i<g->n;i++)
scanf("%c\n",&(g->vexs[i]));
//初始化邻接矩阵

for(i=0;i<g->n;i++)
for(j=0;j<g->n;j++)
g->edges[i][j]=INF;

printf("请输入每条边对应的两个顶点的序号及每条边的权重 (输入格式为:i,j,k):"); //程序运行到这一步直接跳过接下来的for循环,这是为什么?
for(k=0;k<g->e;k++)
{
scanf("%d,%d,%d",&i,&j,&w);
g->edges[i][j]=w; //此为有向图的邻接矩阵储存建立
}

}

//打印图(邻接矩阵)
void printGragh(MGragh *g)
{
printf("\n图G的邻接矩阵\n");
printf("顶点:\n");
for(int i=0;i<g->n;i++)
{
printf("%c\t",g->vexs[i]);
}
printf("\n邻接矩阵:\n");
for(int i=0;i<g->n;i++)
{
for(int j=0;j<g->n;j++)
{
printf("%d\t",g->edges[i][j]);
}
printf("\n");
}
}

MGragh *init_MGraph()
{
MGragh *mg=(MGragh *)malloc(sizeof(MGragh));
if(mg)
{
mg->n=0;
mg->e=0;
}

return mg;
}

int main()
{
//创建图(邻接矩阵)
MGragh *mG=init_MGraph();
CreateGraph(mG);
printGragh(mG);
}
...全文
676 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
是不是该把print语句加入到佛如循环中,每循环一次,输出依次输入提示
赵4老师 2018-05-07
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。
Mathew_Lewis 2018-05-06
  • 打赏
  • 举报
回复
程序运行到void CreateGraph(MGragh *g) 这个函数的printf("请输入每条边对应的两个顶点的序号及每条边的权重 (输入格式为:i,j,k):"); 语句后直接跳过了下个for循环,这是为什么?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧