思路 dfs 考虑选或者不选每个位置
用0表示未考虑 1表示选 2表示不选
用u表示搜索状态
u>n时 已经搜到底层了 需要输出当前方案
遍历 如果选了则输出
#include<iostream>
using namespace std;
int n;
const int N=16;
int st[N];
void dfs(int u){
//u来记录考虑到几个位置了
if(u>n){
//如果已经考虑过最后一个位置
//遍历每个位置 如果该位置已经选过 则输出
for(int i=1;i<=n;i++){
if(st[i]==1){
cout<<i<<' ';
}
}
cout<<endl;
return;
}
st[u]=2;
//不选当前位置 搜索下一层
dfs(u+1);
st[u]=0;//恢复现场
st[u]=1;//选当前位置考虑下一层搜素
dfs(u+1);
st[u]=0;//恢复现场
}
int main(){
cin>>n;
dfs(1);
return 0;
}