用c语言写深度遍历
时间: 2023-08-21 18:04:18 浏览: 111
图的深度遍历(C语言)
以下是一个使用C语言实现深度遍历(DFS)的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
// 定义邻接矩阵结构体
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 顶点数组
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 边的二维数组
int vertex_num; // 顶点数
int edge_num; // 边数
} Graph;
// 初始化邻接矩阵
void init_graph(Graph *g) {
int i, j;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
g->vertex[i] = 0;
for (j = 0; j < MAX_VERTEX_NUM; j++) {
g->edge[i][j] = 0;
}
}
g->vertex_num = 0;
g->edge_num = 0;
}
// 添加边
void add_edge(Graph *g, int v1, int v2) {
g->edge[v1][v2] = 1;
g->edge[v2][v1] = 1;
g->edge_num++;
}
// 深度优先遍历
void dfs(Graph *g, int v, int *visited) {
int i;
visited[v] = 1;
printf("%d ", v);
for (i = 0; i < g->vertex_num; i++) {
if (g->edge[v][i] && !visited[i]) {
dfs(g, i, visited);
}
}
}
int main() {
Graph g;
init_graph(&g);
int visited[MAX_VERTEX_NUM] = {0};
// 添加边
add_edge(&g, 0, 1);
add_edge(&g, 0, 2);
add_edge(&g, 1, 2);
add_edge(&g, 2, 3);
add_edge(&g, 3, 3);
// 深度遍历
dfs(&g, 2, visited);
return 0;
}
```
在这个示例中,我们使用邻接矩阵来表示图,使用深度优先遍历算法来遍历图中的节点。在遍历的过程中,我们使用一个visited数组来记录已经访问过的节点,避免重复访问。
阅读全文