题目
从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式
输入一个整数 nn。
输出格式
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好 11 个空格隔开。
对于没有选任何数的方案,输出空行。
本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
数据范围
1≤n≤151≤n≤15
输入样例:
3
输出样例:
3
2
2 3
1
1 3
1 2
1 2 3
解析
通过自定函数dfs来实现
1.a数组是用来保存要输出的数
2.用vis来记录已用的数字
3.用start来保证后面的数是升序的
#include<iostream>
using namespace std;
int n,m;
int a[30];
bool vis[30];
void dfs(int pos,int tar)
{
if(pos==tar+1){
for(int i=1;i<=tar;i++) cout<<a[i]<<" ";
cout<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
vis[i]=true;
a[pos]=i;
dfs(pos+1,tar);
vis[i]=false;
}
}
}
int main()
{
cin>>n;
dfs(1,n);
return 0;
}