无向图 c语言完整代码 简单版
时间: 2023-09-09 21:12:43 浏览: 76
以下是一个简单的无向图的C语言实现,包含了创建图、添加边、深度优先搜索等基本操作。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 50
// 图的结构体
typedef struct Graph {
int numVertices; // 图中顶点数量
int adjMatrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
} Graph;
// 初始化图
void initGraph(Graph *graph, int numVertices) {
graph->numVertices = numVertices;
int i, j;
for (i = 0; i < numVertices; i++) {
for (j = 0; j < numVertices; j++) {
graph->adjMatrix[i][j] = 0;
}
}
}
// 添加边
void addEdge(Graph *graph, int src, int dest) {
// 无向图需要同时更新两个位置
graph->adjMatrix[src][dest] = 1;
graph->adjMatrix[dest][src] = 1;
}
// 深度优先搜索
void dfs(Graph *graph, int vertex, int visited[]) {
visited[vertex] = 1;
printf("%d ", vertex);
int i;
for (i = 0; i < graph->numVertices; i++) {
if (graph->adjMatrix[vertex][i] == 1 && visited[i] == 0) {
dfs(graph, i, visited);
}
}
}
// 测试
int main() {
Graph graph;
initGraph(&graph, 5);
addEdge(&graph, 0, 1);
addEdge(&graph, 0, 2);
addEdge(&graph, 1, 2);
addEdge(&graph, 2, 3);
addEdge(&graph, 3, 4);
int visited[MAX_VERTICES] = {0};
printf("DFS Traversal: ");
dfs(&graph, 0, visited);
printf("\n");
return 0;
}
```
这个简单的实现中,我们通过邻接矩阵来表示图的结构,然后通过深度优先搜索来遍历整个图。
阅读全文