C语言实现图的邻接矩阵存储表示;
时间: 2023-11-25 10:09:17 浏览: 58
C语言实现图的邻接矩阵存储操作
5星 · 资源好评率100%
邻接矩阵是一种图的存储方式,它是一个二维矩阵,其中行和列分别代表图中的顶点,矩阵中的每个元素表示两个顶点之间是否有边。对于无向图,邻接矩阵是对称的;对于有向图,则不一定对称。
下面是C语言实现图的邻接矩阵存储表示的示例代码:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100
typedef char VertexType;
typedef int EdgeType;
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; // 存储顶点信息
EdgeType edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边信息,即邻接矩阵
int vexnum, edgenum; // 记录图的顶点数和边数
} MGraph;
void CreateGraph(MGraph *G) {
printf("请输入顶点数和边数:\n");
scanf("%d%d", &G->vexnum, &G->edgenum);
printf("请输入%d个顶点信息:\n", G->vexnum);
for (int i = 0; i < G->vexnum; i++) {
scanf(" %c", &G->vexs[i]);
}
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
G->edges[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入%d条边信息:\n", G->edgenum);
for (int k = 0; k < G->edgenum; k++) {
int i, j;
scanf("%d%d", &i, &j);
G->edges[i][j] = 1; // 无向图为1,有向图为权值
G->edges[j][i] = 1; // 无向图需要对称存储
}
}
void PrintGraph(MGraph G) {
printf("该图的邻接矩阵表示如下:\n");
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
printf("%d ", G.edges[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
CreateGraph(&G);
PrintGraph(G);
return 0;
}
```
在该代码中,我们首先定义了图的结构体MGraph,其中包含了存储顶点信息的数组vexs和存储边信息的邻接矩阵数组edges。然后,我们通过CreateGraph函数来创建图,其中需要输入图的顶点数和边数,以及每个顶点的信息和每条边的信息。最后,我们通过PrintGraph函数来打印出该图的邻接矩阵表示。
阅读全文