dfs搜索树用c++怎么实现
时间: 2024-01-27 07:03:02 浏览: 72
二叉搜索树的c++实现
4星 · 用户满意度95%
可以通过递归和栈两种方式实现dfs搜索树。在递归实现中,先访问当前节点,然后递归访问其子节点。在栈实现中,将当前节点入栈后,依次出栈并访问其子节点直到栈为空。具体实现可以参考以下代码:
```c
#include <stdio.h>
#define N 10
// 定义邻接矩阵和节点状态
int graph[N][N], visited[N];
// 深度优先搜索递归实现
void dfs_recursive(int cur) {
int i;
visited[cur] = 1;
printf("%d ", cur);
for (i = 0; i < N; i++) {
if (graph[cur][i] && !visited[i]) {
dfs_recursive(i);
}
}
}
// 深度优先搜索栈实现
void dfs_stack(int start) {
int i, cur;
int stack[N], top = 0;
stack[top++] = start;
visited[start] = 1;
while (top > 0) {
cur = stack[--top];
printf("%d ", cur);
for (i = 0; i < N; i++) {
if (graph[cur][i] && !visited[i]) {
visited[i] = 1;
stack[top++] = i;
}
}
}
}
int main() {
// 初始化邻接矩阵和节点状态
int i, j;
for (i = 0; i < N; i++) {
visited[i] = 0;
for (j = 0; j < N; j++) {
graph[i][j] = 0;
}
}
// 添加边
graph[0][1] = graph[0][2] = 1;
graph[1][3] = graph[1][4] = 1;
graph[2][5] = 1;
graph[3][6] = graph[3][7] = 1;
graph[4][7] = graph[4][8] = 1;
graph[5][8] = 1;
graph[6][9] = 1;
// 深度优先搜索遍历
dfs_recursive(0);
printf("\n");
for (i = 0; i < N; i++) {
visited[i] = 0;
}
dfs_stack(0);
printf("\n");
return 0;
}
```
阅读全文