3,881
社区成员
发帖
与我相关
我的任务
分享
#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);
}
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。