如何用c语言邻接矩阵表示法建立无向图
时间: 2023-12-10 14:05:41 浏览: 98
邻接矩阵是一种用于表示图的数据结构,其中矩阵中的每个元素表示两个顶点之间是否存在边。对于无向图而言,矩阵是对称的。
以下是使用C语言邻接矩阵表示法建立无向图的示例代码:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 20
// 邻接矩阵无向图结构体
typedef struct {
char vertices[MAX_VERTEX_NUM]; // 顶点表
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数
int edge_num; // 边数
} MGraph;
// 初始化无向图
void InitMGraph(MGraph *G) {
int i, j;
printf("请输入顶点数和边数:\n");
scanf("%d %d", &G->vertex_num, &G->edge_num);
fflush(stdin);
printf("请输入顶点信息:\n");
for (i = 0; i < G->vertex_num; i++) {
scanf("%c", &G->vertices[i]);
fflush(stdin);
}
// 初始化邻接矩阵
for (i = 0; i < G->vertex_num; i++) {
for (j = 0; j < G->vertex_num; j++) {
G->arcs[i][j] = 0;
}
}
// 构建邻接矩阵
printf("请输入每条边的起点和终点:\n");
for (i = 0; i < G->edge_num; i++) {
int v1, v2;
scanf("%d %d", &v1, &v2);
G->arcs[v1][v2] = 1;
G->arcs[v2][v1] = 1;
}
}
// 打印无向图
void PrintMGraph(MGraph G) {
int i, j;
printf("邻接矩阵:\n");
for (i = 0; i < G.vertex_num; i++) {
for (j = 0; j < G.vertex_num; j++) {
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
InitMGraph(&G);
PrintMGraph(G);
return 0;
}
```
在上面的代码中,我们定义了一个 `MGraph` 结构体来表示邻接矩阵无向图。`InitMGraph` 函数用于初始化图,包括输入顶点数、边数、顶点信息以及每条边的起点和终点,并构建邻接矩阵。`PrintMGraph` 函数用于打印邻接矩阵。在 `main` 函数中,我们调用 `InitMGraph` 和 `PrintMGraph` 函数来构建并打印无向图。
注意,上面的代码中,我们假设顶点使用字符表示,因此在输入顶点信息时使用了 `%c` 格式化符号。如果顶点使用其他类型表示,需要相应更改输入和打印的代码。
阅读全文