修改一下代码://采用数组(邻接矩阵)表示法,构造图G void CreateGraph(MGraph &G){ printf("请输入顶点数和边数:\n"); scanf("%d%d",&G.vexnum,&G.arcnum); for(int i=0;i<G.vexnum;i++){ //初始化邻接矩阵 for(int j=0;j<G.vexnum;j++){ G.Edge[i][j]=0; } } int k,w; char a,b; printf("输入顶点:"); getchar(); gets(G.Vex); for (k = 0; k < G.arcnum; k++) { // 读入边,建立邻接矩阵 printf("请输入第%d条边(vi, vj)和权值w:", k + 1); scanf(" %c %c %d", &a, &b, &w); for(int i=0;i<G.vexnum;i++){ //初始化邻接矩阵 for(int j=0;j<G.vexnum;j++){ G.Edge[i - 1][j - 1] = w; G.Edge[j - 1][i - 1] = w; } } } }
时间: 2023-06-25 18:02:04 浏览: 343
修改后的代码如下:
//采用数组(邻接矩阵)表示法,构造图G
void CreateGraph(MGraph &G){
printf("请输入顶点数和边数:\n");
scanf("%d%d",&G.vexnum,&G.arcnum);
for(int i=0;i<G.vexnum;i++){
//初始化邻接矩阵
for(int j=0;j<G.vexnum;j++){
G.Edge[i][j]=0;
}
}
int k,w;
char a,b;
printf("输入顶点:");
getchar();
gets(G.Vex);
for (k = 0; k < G.arcnum; k++) {
// 读入边,建立邻接矩阵
printf("请输入第%d条边(vi, vj)和权值w:", k + 1);
scanf(" %c %c %d", &a, &b, &w);
int i = a - 'A';
int j = b - 'A';
G.Edge[i][j] = w;
G.Edge[j][i] = w;
}
}
修改说明:在读入一条边时,将顶点转换为对应的数组下标,然后在邻接矩阵中记录该边的权值。同时,不需要在输入边的循环中再次初始化邻接矩阵,因为已经在函数开头进行了初始化。
阅读全文