查看来源点这里

开个vis数组判断123到底选不选
一开始全都不选
vis全为0
如果进入第一个dfs表示u不选
进入第二个dfs表示u选
先上代码再上图
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=17;
bool vis[N];
void dfs(int u){
if(u>n){
for(int i=1;i<=n;i++)if(vis[i])printf("%d ",i);printf("\n");
return;
}
dfs(u+1);//第1个dfs 此时vis[u]=0 表示u不选
vis[u]=true;
dfs(u+1);//第2个dfs 此时vis[u]=1 表示u选
vis[u]=false;
}
int main(){
cin>>n;
dfs(1);
return 0;
}



u为4时vis数组为1表示对应下标输出
我也不知道这题怎么想出来的 看的y总的题解


1125

被折叠的 条评论
为什么被折叠?



