输入 输出 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 实现该测试案例的完整代码用c语言实现
时间: 2024-03-24 09:37:50 浏览: 56
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 定义邻接矩阵类型
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 存放顶点的数组
AdjMatrix arcs; // 存放边的邻接矩阵
int vexnum, arcnum; // 记录顶点数和弧数
} Graph;
// 初始化无向图
void InitGraph(Graph *G) {
printf("请输入图的顶点个数和弧数:");
scanf("%d%d", &(G->vexnum), &(G->arcnum));
getchar(); // 读取换行符
printf("请用一行输入图的各个顶点,不用逗号隔开:");
for (int i = 0; i < G->vexnum; i++) {
scanf("%c", &(G->vexs[i]));
getchar(); // 读取换行符或空格
}
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请用一行输入图中所有两顶点之间的弧,例如,a,b b,c b,d:");
for (int k = 0; k < G->arcnum; k++) {
char v1, v2;
scanf("%c,%c", &v1, &v2);
getchar(); // 读取换行符
int i, j;
for (i = 0; i < G->vexnum && G->vexs[i] != v1; i++); // 找到顶点v1的下标i
for (j = 0; j < G->vexnum && G->vexs[j] != v2; j++); // 找到顶点v2的下标j
G->arcs[i][j] = G->arcs[j][i] = 1; // 标记边<v1, v2>和<v2, v1>
}
}
// 打印邻接矩阵
void PrintAdjMatrix(Graph G) {
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
Graph G;
InitGraph(&G);
PrintAdjMatrix(G);
return 0;
}
```
阅读全文