实现图的存储,输出存储结构示意图的代码c语言
时间: 2023-08-12 20:18:49 浏览: 98
C++实现图的存储结构及遍历
5星 · 资源好评率100%
以下是使用邻接矩阵和邻接表两种方式实现图的存储,并输出存储结构示意图的 C 代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 使用邻接矩阵实现图的存储,并输出存储结构示意图
#define MAX_VERTICES 10
typedef struct Graph {
int vertices;
int adj_matrix[MAX_VERTICES][MAX_VERTICES];
} Graph;
Graph* create_graph(int vertices) {
Graph* g = (Graph*) malloc(sizeof(Graph));
g->vertices = vertices;
for (int i = 0; i < vertices; i++) {
for (int j = 0; j < vertices; j++) {
g->adj_matrix[i][j] = 0;
}
}
return g;
}
void add_edge(Graph* g, int v1, int v2, int weight) {
g->adj_matrix[v1][v2] = weight;
g->adj_matrix[v2][v1] = weight; // 对于无向图,邻接矩阵是对称的
}
void print_graph(Graph* g) {
for (int i = 0; i < g->vertices; i++) {
for (int j = 0; j < g->vertices; j++) {
printf("%d ", g->adj_matrix[i][j]);
}
printf("\n");
}
}
int main() {
Graph* g = create_graph(4);
add_edge(g, 0, 1, 1);
add_edge(g, 0, 2, 1);
add_edge(g, 1, 2, 1);
add_edge(g, 1, 3, 1);
add_edge(g, 2, 3, 1);
print_graph(g);
return 0;
}
// 输出:
// 0 1 1 0
// 1 0 1 1
// 1 1 0 1
// 0 1 1 0
// 使用邻接表实现图的存储,并输出存储结构示意图
typedef struct Node {
int val;
struct Node* next;
} Node;
typedef struct Graph {
int vertices;
Node* adj_list[MAX_VERTICES];
} Graph;
Graph* create_graph(int vertices) {
Graph* g = (Graph*) malloc(sizeof(Graph));
g->vertices = vertices;
for (int i = 0; i < vertices; i++) {
g->adj_list[i] = NULL;
}
return g;
}
void add_edge(Graph* g, int v1, int v2) {
// 添加 v2 到 v1 的链表中
Node* node = (Node*) malloc(sizeof(Node));
node->val = v2;
node->next = g->adj_list[v1];
g->adj_list[v1] = node;
// 添加 v1 到 v2 的链表中
node = (Node*) malloc(sizeof(Node));
node->val = v1;
node->next = g->adj_list[v2];
g->adj_list[v2] = node;
}
void print_graph(Graph* g) {
for (int i = 0; i < g->vertices; i++) {
printf("%d: ", i);
Node* node = g->adj_list[i];
while (node) {
printf("%d -> ", node->val);
node = node->next;
}
printf("None\n");
}
}
int main() {
Graph* g = create_graph(4);
add_edge(g, 0, 1);
add_edge(g, 0, 2);
add_edge(g, 1, 2);
add_edge(g, 1, 3);
add_edge(g, 2, 3);
print_graph(g);
return 0;
}
// 输出:
// 0: 2 -> 1 -> None
// 1: 3 -> 2 -> 0 -> None
// 2: 3 -> 1 -> 0 -> None
// 3: 2 -> 1 -> None
```
以上代码中,使用 `Graph` 结构体来表示图,`create_graph` 函数用于创建图,`add_edge` 函数用于添加边,`print_graph` 函数用于输出存储结构示意图。其中使用 `adj_matrix` 数组来存储邻接矩阵,使用 `adj_list` 数组来存储邻接表,每个链表的头结点表示该顶点相邻的顶点。
阅读全文