不带权无向图的创建算法C语言代码
时间: 2024-12-18 15:35:15 浏览: 4
在C语言中,可以使用邻接矩阵或邻接表来表示不带权无向图。这里是一个使用邻接表的基本示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int vertex; // 结点值
struct Node** adj; // 邻接表
} Graph;
// 动态分配邻接表的空间
void createAdjList(Graph* graph, int vertices) {
graph->adj = (struct Node**)malloc(vertices * sizeof(struct Node*));
for (int i = 0; i < vertices; ++i) {
graph->adj[i] = NULL;
}
}
// 添加边到邻接表
void addEdge(Graph* graph, int v, int w) {
if (graph->adj[v] == NULL) {
graph->adj[v] = (struct Node*)malloc(sizeof(struct Node));
graph->adj[v]->next = NULL;
graph->adj[v]->vertex = w;
} else {
struct Node* temp = graph->adj[v];
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = (struct Node*)malloc(sizeof(struct Node));
temp->next->vertex = w;
temp->next->next = NULL;
}
}
// 测试用法
int main() {
int V = 5; // 顶点数
Graph g;
createAdjList(&g, V);
// 添加边
addEdge(&g, 0, 1);
addEdge(&g, 1, 2);
addEdge(&g, 2, 3);
addEdge(&g, 3, 4);
addEdge(&g, 4, 0); // 因为图是无向的,所以需要添加来回的边
return 0;
}
```
在这个代码中,我们首先定义了一个结构体`Graph`表示图,并为每个顶点维护一个邻接链表。`createAdjList`函数用于初始化邻接表,`addEdge`函数负责插入边。
请注意,这只是一个基本的示例,实际应用中可能还需要处理内存释放等细节。
阅读全文