帮我用C++写一段dfs
时间: 2024-02-28 10:27:55 浏览: 51
C++深度遍历
3星 · 编辑精心推荐
以下是一个基本的DFS算法,使用递归实现:
```c
#include <stdio.h>
#define MAXN 1000
int n; // 数组长度
int a[MAXN]; // 数组
int vis[MAXN]; // 访问标记
// 深度优先搜索
void dfs(int cur) {
if (cur == n) { // 达到叶子节点
// 处理结果
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return;
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) { // 如果未被访问过
vis[i] = 1; // 标记为已访问
a[cur] = i; // 保存当前节点
dfs(cur + 1); // 递归搜索下一个节点
vis[i] = 0; // 回溯,取消访问标记
}
}
}
int main() {
// 初始化
scanf("%d", &n);
dfs(0); // 从根节点开始搜索
return 0;
}
```
这个程序用于输出1到n的全排列。具体实现方式是从1到n枚举每个位置上的数,如果这个数没有被访问过,就标记为已访问,并递归搜索下一个位置。如果到达叶子节点,就输出结果。回溯时,取消访问标记,继续搜索其他可行解。
阅读全文