题目链接:https://ac.nowcoder.com/acm/contest/998/C
思路:枚举每个位置上放哪个数。
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 20;
int n; // n个整数
bool used[N]; // 标记整数是否被选择过
int path[N]; // 按顺序依次记录被选择的整数
void solve(int idx)
{
if (idx == n + 1)
{
for (int i = 1; i <= n; i++)
{
printf("%d ", path[i]);
}
puts("");
return;
}
for (int i = 1; i <= n; i++)
{
if (used[i]) continue;
used[i] = true;
path[idx] = i;
solve(idx + 1);
used[i] = false;
path[idx] = 0; // 这一行可以省略
}
}
int main()
{
scanf("%d", &n);
solve(1);
return 0;
}