
思路 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;
 }



















