用邻接矩阵来创建图: 输入图的顶点个数和弧数,输入图的各个顶点,输入图中所有两顶点之间的弧,例如,a,b b,c b,d,打印出用邻接矩阵创建的无向图用c语言实现的完整代码
时间: 2024-03-25 18:39:31 浏览: 68
以下是用C语言实现的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
typedef struct {
char vertex[MAX_VERTEX_NUM];
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vertex_num;
int arc_num;
} Graph;
void createGraph(Graph *G) {
int i, j, k;
char v1, v2;
printf("请输入图的顶点个数和弧数(用空格隔开):");
scanf("%d %d", &(G->vertex_num), &(G->arc_num));
printf("请输入图的各个顶点:");
for (i = 0; i < G->vertex_num; i++) {
getchar(); // 读取换行符
scanf("%c", &(G->vertex[i]));
}
for (i = 0; i < G->vertex_num; i++) {
for (j = 0; j < G->vertex_num; j++) {
G->arcs[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入图中所有两顶点之间的弧(用空格隔开):");
for (k = 0; k < G->arc_num; k++) {
getchar(); // 读取换行符
scanf("%c %c", &v1, &v2);
// 查找顶点在vertex数组中的下标
for (i = 0; i < G->vertex_num; i++) {
if (G->vertex[i] == v1) {
break;
}
}
for (j = 0; j < G->vertex_num; j++) {
if (G->vertex[j] == v2) {
break;
}
}
G->arcs[i][j] = 1;
G->arcs[j][i] = 1; // 无向图,需要对称处理
}
}
void printGraph(Graph G) {
int i, j;
printf("用邻接矩阵创建的无向图:\n");
printf(" ");
for (i = 0; i < G.vertex_num; i++) {
printf("%c ", G.vertex[i]);
}
printf("\n");
for (i = 0; i < G.vertex_num; i++) {
printf("%c ", G.vertex[i]);
for (j = 0; j < G.vertex_num; j++) {
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
Graph G;
createGraph(&G);
printGraph(G);
return 0;
}
```
输入示例:
```
请输入图的顶点个数和弧数(用空格隔开):4 3
请输入图的各个顶点:a b c d
请输入图中所有两顶点之间的弧(用空格隔开):a b b c b d
```
输出示例:
```
用邻接矩阵创建的无向图:
a b c d
a 0 1 0 0
b 1 0 1 1
c 0 1 0 0
d 0 1 0 0
```
阅读全文