从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式
输入一个整数 n。
输出格式
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。
对于没有选任何数的方案,输出空行。
本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
数据范围
1≤n≤15
输入样例:
3
输出样例:
3
2
2 3
1
1 3
1 2
1 2 3
//要么选要么不选dfs
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int st[N],num[N];
vector<vector<int>>v;
int n;
void dfs(int u){
if(u==n){
vector<int>v0;
for(int i=1;i<=n;i++){
if(st[i-1]==1){
v0.push_back(i);
}
}
v.push_back(v0);
return;
}
st[u]=1;//fang
dfs(u+1);
st[u]=2;//bu fang
dfs(u+1);
st[u]=0;
}
int main(){
cin >> n;
dfs(0);
for(int i=0;i<v.size();i++){
for(int j=0;j<v[i].size();j++){
cout << v[i][j]<<" ";
}
cout << endl;
}
return 0;
}