创建带权无向图的邻接矩阵数据结构c语言
时间: 2023-09-23 08:06:41 浏览: 126
下面是一个使用结构体来实现带权无向图邻接矩阵的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
// 边的结构体
typedef struct {
int v1; // 边的起点
int v2; // 边的终点
int weight; // 边的权值
} Edge;
// 图的结构体
typedef struct {
int matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
int n; // 顶点数
int m; // 边数
} Graph;
// 初始化图
void initGraph(Graph *g) {
int i, j;
g->n = 0;
g->m = 0;
for (i = 0; i < MAX_VERTICES; i++) {
for (j = 0; j < MAX_VERTICES; j++) {
g->matrix[i][j] = 0;
}
}
}
// 添加边
void addEdge(Graph *g, int v1, int v2, int weight) {
g->matrix[v1][v2] = weight;
g->matrix[v2][v1] = weight;
g->m++;
}
// 创建图
void createGraph(Graph *g) {
int i, v1, v2, weight;
printf("请输入顶点数:");
scanf("%d", &g->n);
printf("请输入边的数量:");
scanf("%d", &g->m);
for (i = 0; i < g->m; i++) {
printf("请输入第%d条边的起点、终点和权值:", i+1);
scanf("%d %d %d", &v1, &v2, &weight);
addEdge(g, v1, v2, weight);
}
}
// 打印邻接矩阵
void printGraph(Graph *g) {
int i, j;
printf("邻接矩阵为:\n");
for (i = 0; i < g->n; i++) {
for (j = 0; j < g->n; j++) {
printf("%d ", g->matrix[i][j]);
}
printf("\n");
}
}
int main() {
Graph g;
initGraph(&g);
createGraph(&g);
printGraph(&g);
return 0;
}
```
上面的代码中,我们定义了一个边的结构体和一个图的结构体,使用邻接矩阵来存储图。程序首先会要求用户输入顶点数和边的数量,然后逐个输入每条边的起点、终点和权值,最后输出邻接矩阵。
阅读全文