C语言1. 图的基本操作:1.基于邻接矩阵建立图 《实验一:基于邻接矩阵建立图》 (1) 要求:补全代码 (2) 测试用例: 输入 输出 4 3↵ abcd↵ a,b b,c b,d 用邻接矩阵来创建图↵ 请输入图的顶点个数和弧数↵ 请用一行输入图的各个顶点,不用逗号隔开↵ 请用一行输入图中所有两顶点之间的弧,例如,a,b b,c b,d↵ 打印出用邻接矩阵创建的无向图↵ 0 1 0 0 ↵ 1 0 1 1 ↵ 0 1 0 0 ↵ 0 1 0 0
时间: 2024-03-02 12:54:00 浏览: 46
好的,我的回答如下:
首先,感谢您的提问。我了解您需要补全基于邻接矩阵建立图的 C 语言代码,并测试其正确性。以下是代码及对应的测试用例输出:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
typedef struct {
char vexs[MAX_VERTEX_NUM];
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vex_num, arc_num;
} Graph;
void CreateGraph(Graph *G) {
int i, j, k;
char ch1, ch2;
printf("请输入图的顶点个数和弧数\n");
scanf("%d%d", &G->vex_num, &G->arc_num);
printf("请用一行输入图的各个顶点,不用逗号隔开\n");
for (i = 0; i < G->vex_num; i++) {
scanf(" %c", &G->vexs[i]);
}
for (i = 0; i < G->vex_num; i++) {
for (j = 0; j < G->vex_num; j++) {
G->arcs[i][j] = 0;
}
}
printf("请用一行输入图中所有两顶点之间的弧,例如,a,b b,c b,d\n");
for (k = 0; k < G->arc_num; k++) {
scanf(" %c,%c", &ch1, &ch2);
for (i = 0; i < G->vex_num; i++) {
if (G->vexs[i] == ch1) {
break;
}
}
for (j = 0; j < G->vex_num; j++) {
if (G->vexs[j] == ch2) {
break;
}
}
G->arcs[i][j] = G->arcs[j][i] = 1;
}
}
void PrintGraph(Graph G) {
int i, j;
printf("打印出用邻接矩阵创建的无向图\n");
for (i = 0; i < G.vex_num; i++) {
for (j = 0; j < G.vex_num; j++) {
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
Graph G;
CreateGraph(&G);
PrintGraph(G);
return 0;
}
```
测试用例输入:
```
4 3
abcd
a,b b,c b,d
```
测试用例输出:
```
打印出用邻接矩阵创建的无向图
0 1 0 0
1 0 1 1
0 1 0 0
0 1 0 0
```
希望我的回答能够帮到您!如果您还有其他问题,请继续提问。
阅读全文