图的邻接矩阵代码C语言
时间: 2023-07-09 19:05:59 浏览: 116
以下是一个简单的无向图邻接矩阵的代码实现:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 50
// 邻接矩阵
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 存储顶点
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边
int vertex_num, edge_num; // 顶点数和边数
} Graph;
// 初始化图
void init_graph(Graph *G) {
// 初始化顶点和边数
G->vertex_num = 0;
G->edge_num = 0;
// 初始化边权重为0
for (int i = 0; i < MAX_VERTEX_NUM; i++) {
for (int j = 0; j < MAX_VERTEX_NUM; j++) {
G->edges[i][j] = 0;
}
}
}
// 添加顶点
void add_vertex(Graph *G, int v) {
if (G->vertex_num >= MAX_VERTEX_NUM) {
printf("超过最大顶点数!");
return;
}
G->vertex[G->vertex_num++] = v;
}
// 添加边
void add_edge(Graph *G, int v1, int v2, int weight) {
int i, j;
for (i = 0; i < G->vertex_num; i++) {
if (G->vertex[i] == v1) break;
}
for (j = 0; j < G->vertex_num; j++) {
if (G->vertex[j] == v2) break;
}
if (i >= G->vertex_num || j >= G->vertex_num) {
printf("顶点不存在!");
return;
}
G->edges[i][j] = weight;
G->edges[j][i] = weight; // 无向图需同时设置
G->edge_num++;
}
// 打印邻接矩阵
void print_graph(Graph G) {
printf("\n顶点数:%d,边数:%d\n", G.vertex_num, G.edge_num);
printf(" ");
for (int i = 0; i < G.vertex_num; i++) {
printf("%d ", G.vertex[i]);
}
printf("\n");
for (int i = 0; i < G.vertex_num; i++) {
printf("%d: ", G.vertex[i]);
for (int j = 0; j < G.vertex_num; j++) {
printf("%d ", G.edges[i][j]);
}
printf("\n");
}
}
int main() {
Graph G;
init_graph(&G);
add_vertex(&G, 1);
add_vertex(&G, 2);
add_vertex(&G, 3);
add_vertex(&G, 4);
add_edge(&G, 1, 2, 1);
add_edge(&G, 1, 3, 2);
add_edge(&G, 2, 4, 3);
add_edge(&G, 3, 4, 4);
print_graph(G);
return 0;
}
```
该代码实现了无向图的邻接矩阵存储和打印,可以通过 `add_vertex` 和 `add_edge` 函数来添加顶点和边,最终使用 `print_graph` 函数打印邻接矩阵。
阅读全文