题目链接
http://noi-test.zzstep.com/contest/0x00%E3%80%8C%E5%9F%BA%E6%9C%AC%E7%AE%97%E6%B3%95%E3%80%8D%E4%BE%8B%E9%A2%98/0303%20%E9%80%92%E5%BD%92%E5%AE%9E%E7%8E%B0%E6%8E%92%E5%88%97%E5%9E%8B%E6%9E%9A%E4%B8%BE
分析
枚举未选取的数,递归下一位置,回溯后要清除记录是否选取的标记
AC代码
#include <cstdio>
const int maxn = 15;
int n, num[maxn];
bool vis[maxn];
void dfs(int now) {
if (now == n + 1) {
for (int i = 1; i <= n; ++i) printf("%d ", num[i]);
puts("");
return;
}
for (int i = 1; i <= n; ++i)
if (!vis[i]) {
vis[i] = 1;
num[now] = i;
dfs(now + 1);
vis[i] = 0;
}
}
int main() {
scanf("%d", &n);
dfs(1);
return 0;
}