使用c语言打印邻接矩阵,实现有向图和无向图的邻接矩阵
时间: 2023-11-04 14:59:44 浏览: 103
实现邻接矩阵,需要定义一个二维数组来存储图中各个节点之间的边。数组的元素a[i][j]表示节点i和节点j之间的边的权重,如果没有边相连,则为0。以下是使用C语言实现有向图和无向图的邻接矩阵的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义邻接矩阵的最大大小
typedef struct {
int matrix[MAXSIZE][MAXSIZE]; // 邻接矩阵
int size; // 矩阵大小
int isdirected; // 是否为有向图
} Graph;
// 初始化矩阵
void init(Graph *g, int size, int isdirected) {
g->size = size;
g->isdirected = isdirected;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
g->matrix[i][j] = 0;
}
}
}
// 添加一条边
void add_edge(Graph *g, int src, int dst, int weight) {
g->matrix[src][dst] = weight;
if (!g->isdirected) {
g->matrix[dst][src] = weight;
}
}
// 打印邻接矩阵
void print(Graph *g) {
printf(" ");
for (int i = 0; i < g->size; i++) {
printf("%d ", i);
}
printf("\n");
for (int i = 0; i < g->size; i++) {
printf("%2d: ", i);
for (int j = 0; j < g->size; j++) {
printf("%d ", g->matrix[i][j]);
}
printf("\n");
}
}
int main() {
Graph g;
init(&g, 5, 0); // 初始化一个大小为5的无向图
add_edge(&g, 0, 1, 1); // 添加边
add_edge(&g, 0, 2, 2);
add_edge(&g, 1, 2, 3);
add_edge(&g, 3, 4, 4);
print(&g); // 打印邻接矩阵
return 0;
}
```
其输出结果为:
```
0 1 2 3 4
0: 0 1 2 0 0
1: 1 0 3 0 0
2: 2 3 0 0 0
3: 0 0 0 0 4
4: 0 0 0 4 0
```
说明成功地实现了无向图的邻接矩阵。
如果要实现有向图的邻接矩阵,只需要将初始化函数中的isdirected参数值改为1即可。
阅读全文