#include<bits/stdc++.h>
using namespace std;
const int N = 10;
int n;
vector<int>ve;
void dfs(int u, int state){//u表示已经遍历了几位,state表示我们当前已经枚举到的数
if(u == n){
for(int i = 0; i < n; i ++ ) cout<<ve[i]<<" ";
cout<<endl;
return ;
}
for(int i = 0; i < n; i ++ ){
//循环遍历n位,保证每一位都是1
if(!(state >> i & 1)){//寻找是0的那个位置
//每近一次这个if就会让state多补一位1,进n次之后就能保证state都是由1组成的
ve.push_back(i + 1);//把当前的数放在那个位置上
dfs(u + 1, state | (1 << i));
ve.pop_back();//恢复现场
}
}
}
int main()
{
cin>>n;
dfs(0, 0);
return 0;
}
AcWing 94. 递归实现排列型枚举 题解(递归 蓝桥杯)
最新推荐文章于 2024-07-19 15:45:46 发布