AcWing 842. 排列数字
原题链接
简单
作者:
CarpeDime
,
2021-02-20 17:00:24
,
所有人可见
,
阅读 307
C++ 代码
#include <cstdio>
const int N = 10;
int path[N];
bool st[N];
int n;
/**
* dfs 要确定,状态含义与顺序
* st[N]记录是否走过,防止重复;表示状态
* path[N]记录走过的路径,表示顺序
*
**/
void dfs(int x) {
if (x == n) {
for (int i = 0; i < n; ++ i) printf("%d ", path[i]);
puts("");
return ;
}
for (int i = 1; i <= n; ++ i) {
if (!st[i]) {
st[i] = true;
path[x] = i;
dfs(x + 1);
st[i] = false; // 递归结束后要恢复现场
}
}
}
int main() {
scanf("%d", &n);
dfs(0);
return 0;
}