dfs代码模板(带注释)
作者:
那就等雨停吧
,
2021-09-23 18:15:45
,
所有人可见
,
阅读 297
// DFS - 排列数字
#include<iostream>
using namespace std;
const int N = 10;
int n;
int path[N]; // 该条路径上的数字排列
bool st[N]; // 检查该数字是否用过,初始化为false,即未用过
void dfs(int u)
{
// 该排列枚举已完成,输出该情况的排列
if (u == n)
{
for (int i = 0; i < n; i++) printf("%d ", path[i]);
puts("");
return;
}
for (int i = 1; i <= n;i++)
if (!st[i]) // 判断该数字是否被用过
{
path[u] = i; // 若未被用过,则在path数组上开辟一个空间存该数字
st[i] = true; // 并且将该数字标记为已用过
dfs(u + 1); // 递归到下一个数字
st[i] = false; // 递归每返回一次,st[i]就置为false,返回原来没用过的状态,为下一次枚举所用
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}