用C语言先依次输入无向图的顶点信息,再依次输入无向图的边信息,建立图的邻接矩阵存储结构并将其顶点向量和邻接矩阵打印输出,并举例
时间: 2024-02-06 13:10:03 浏览: 91
好的,以下是用C语言实现的建立无向图邻接矩阵的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 定义最大顶点数
typedef struct {
char vertex; // 顶点
} VertexType; // 顶点类型定义
typedef struct {
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 图的顶点数和边数
VertexType vexs[MAX_VERTEX_NUM]; // 存储顶点的一维数组
} MGraph;
// 初始化无向图的邻接矩阵
void CreateGraph(MGraph *G) {
int i, j, k;
char v1, v2;
printf("请输入图的顶点数和边数:\n");
scanf("%d%d", &G->vexnum, &G->arcnum);
printf("请输入各个顶点:\n");
for (i = 0; i < G->vexnum; i++) {
scanf(" %c", &G->vexs[i].vertex);
}
// 初始化邻接矩阵
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->edges[i][j] = 0;
}
}
printf("请输入每条边的两个端点(如A B):\n");
for (k = 0; k < G->arcnum; k++) {
scanf(" %c %c", &v1, &v2);
for (i = 0; i < G->vexnum; i++) {
if (v1 == G->vexs[i].vertex) {
break;
}
}
for (j = 0; j < G->vexnum; j++) {
if (v2 == G->vexs[j].vertex) {
break;
}
}
G->edges[i][j] = 1;
G->edges[j][i] = 1;
}
}
// 打印无向图的邻接矩阵
void PrintGraph(MGraph G) {
int i, j;
printf("顶点向量为:\n");
for (i = 0; i < G.vexnum; i++) {
printf("%c ", G.vexs[i].vertex);
}
printf("\n邻接矩阵为:\n");
for (i = 0; i < G.vexnum; i++) {
for (j = 0; j < G.vexnum; j++) {
printf("%d ", G.edges[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
CreateGraph(&G);
PrintGraph(G);
return 0;
}
```
例如,我们输入以下信息:
```
请输入图的顶点数和边数:
5 7
请输入各个顶点:
A B C D E
请输入每条边的两个端点(如A B):
A B
A C
A E
B C
B D
C D
D E
```
则程序的输出结果如下:
```
顶点向量为:
A B C D E
邻接矩阵为:
0 1 1 0 1
1 0 1 1 0
1 1 0 1 0
0 1 1 0 1
1 0 0 1 0
```
阅读全文