【问题描述】
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
【输入格式】
输入一个整数n。
【输出格式】
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。
对于没有选任何数的方案,输出空行。
各行(不同方案)之间的顺序任意。
【数据范围】
1 ≤ n ≤ 15
【输入样例】
3
【输出样例】
3
2
2 3
1
1 3
1 2
1 2 3
题解:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 15;
int n;
int st[N]; //状态,记录每个位置当前的状态:0表示还没考虑,1表示选它,2表示不选它
void dfs(int step)
{
if(step == n + 1)
{
for(int i = 1 ; i <= n ; i ++)
{
if(st[i] == 1) cout << i << " ";
}
puts("");
return;
}
// 第一个分支:选
st[step] = 1;
dfs(step + 1);
st[step] = 0;
// 第二个分支:不选
st[step] = 2;
dfs(step + 1);
st[step] = 0;
}
int main()
{
cin >> n;
dfs(1);
return 0;
}