你用c语言写一个深度优先遍历的算法
时间: 2024-05-02 08:18:15 浏览: 92
以下是使用C语言编写的深度优先遍历算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
// 邻接矩阵表示的图
typedef struct {
int n; // 顶点数
int adj[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
} Graph;
int visited[MAX_VERTICES]; // 标记已访问的顶点
// 初始化图
void initGraph(Graph *g, int n) {
g->n = n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
g->adj[i][j] = 0;
}
}
}
// 添加边
void addEdge(Graph *g, int u, int v) {
g->adj[u][v] = g->adj[v][u] = 1;
}
// 深度优先遍历
void dfs(Graph *g, int v) {
visited[v] = 1;
printf("%d ", v);
for (int i = 0; i < g->n; i++) {
if (g->adj[v][i] && !visited[i]) {
dfs(g, i);
}
}
}
int main() {
Graph g;
int n = 6;
initGraph(&g, n);
addEdge(&g, 0, 1);
addEdge(&g, 0, 2);
addEdge(&g, 1, 3);
addEdge(&g, 1, 4);
addEdge(&g, 2, 4);
addEdge(&g, 3, 4);
addEdge(&g, 3, 5);
addEdge(&g, 4, 5);
printf("DFS traversal: ");
dfs(&g, 0);
printf("\n");
return 0;
}
```
在上面的代码中,我们定义了一个邻接矩阵表示的图结构体,并定义了初始化图、添加边、深度优先遍历等函数。其中,深度优先遍历函数使用了递归的方式实现,对于每个未访问的邻居顶点,都进行递归调用。在遍历过程中,我们使用一个全局数组visited来标记已访问的顶点。最后,我们在main函数中创建了一个图,并进行了深度优先遍历。
阅读全文