c语言实现邻接矩阵
时间: 2023-07-13 22:12:33 浏览: 104
邻接矩阵是表示图的一种常见的方式,下面是 C 语言实现邻接矩阵的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 100 // 最大顶点数
typedef struct {
int vertex[MAXVEX]; // 顶点表
int edge[MAXVEX][MAXVEX]; // 邻接矩阵
int num_vex, num_edge; // 图的当前顶点数和边数
} AdjMatrix;
void createGraph(AdjMatrix *G) {
int i, j, k, weight;
printf("请输入顶点数和边数: ");
scanf("%d%d", &G->num_vex, &G->num_edge);
getchar(); // 读取回车符
printf("请输入顶点信息: ");
for (i = 0; i < G->num_vex; i++) {
scanf("%d", &G->vertex[i]);
}
getchar(); // 读取回车符
for (i = 0; i < G->num_vex; i++) {
for (j = 0; j < G->num_vex; j++) {
G->edge[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入边信息(格式为: 起点 终点 权重):\n");
for (k = 0; k < G->num_edge; k++) {
scanf("%d%d%d", &i, &j, &weight);
G->edge[i][j] = weight;
G->edge[j][i] = weight; // 无向图的邻接矩阵是对称的
}
}
void printGraph(AdjMatrix *G) {
int i, j;
printf("顶点信息如下:\n");
for (i = 0; i < G->num_vex; i++) {
printf("%d ", G->vertex[i]);
}
printf("\n邻接矩阵信息如下:\n");
for (i = 0; i < G->num_vex; i++) {
for (j = 0; j < G->num_vex; j++) {
printf("%d ", G->edge[i][j]);
}
printf("\n");
}
}
int main() {
AdjMatrix G;
createGraph(&G);
printGraph(&G);
return 0;
}
```
在该示例代码中,我们定义了一个结构体 `AdjMatrix`,其中包含了顶点表和邻接矩阵。函数 `createGraph` 用来创建图,函数 `printGraph` 用来输出图的信息。在创建图的过程中,我们逐行读取用户输入的数据,并将其存储到 `AdjMatrix` 结构体中。最终,我们可以输出图的信息,即顶点信息和邻接矩阵信息。
需要注意的是,示例代码中假设图是无向图,因此邻接矩阵是对称的。如果是有向图,则需要根据边的方向来初始化邻接矩阵。
阅读全文