题目链接:点击这里
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 1010;
int n;
vector<int> path;
void dfs(int idx, int state) //idx枚举"坑",state记录对于当前"坑"该数是选了还是没选
{
if(idx==n)
{
for(auto it : path)
printf("%d ", it);
printf("\n");
return;
}
for(int i = 0; i < n; ++i)
{
if(!(state >> i & 1)) //state的第i位为0
{
path.push_back(i+1); //选i
dfs(idx + 1, state|1<<i); //state的第i位置成1
path.pop_back(); //恢复现场
}
}
}
int main()
{
scanf("%d", &n);
dfs(0, 0);
return 0;
}