C++ 实现全排列算法的 DFS 深度优先搜索
以下是关于如何使用深度优先搜索 (DFS) 来实现全排列算法的详细解释以及代码优化建议。
基本概念
深度优先搜索(Depth First Search, DFS)是一种遍历或搜索树状结构的方法。在全排列问题中,可以通过递归的方式来模拟每一步的选择过程,并利用回溯法来撤销之前的选择以便尝试其他可能性。
#include <iostream>using namespace std;
int n;bool used[10];int permutation[10];
void dfs(int depth) {
if (depth == n + 1) { // 如果当前深度达到目标长度,则打印结果
for (int i = 1; i <= n; ++i) {
cout << permutation[i] << ' ';
}
cout << '\n';
return;
}
for (int i = 1; i <= n; ++i) { // 尝试每一个可用数字
if (!used[i]) { // 若该数字未被使用过
used[i] = true; // 标记为已使用
permutation[depth] = i;// 放入当前位置
dfs(depth + 1); // 进入下一层递归
used[i] = false; // 回溯:恢复标记状态
}
}
}
int main() {
cin >> n;
dfs(1);
return 0;
}
- n 表示要生成全排列的元素数量。
- used[] 数组用来记录某个数字是否已经被选用。
- permutation[] 存储当前正在构建的部分排列。
- 函数 dfs(int depth) 是核心部分,表示当前处理到第几层(即排列中的位置),当到达最后一层时输出完整的排列。