前言
关键点在于 把前面那个数限制成小于后面那个数即可 就不会再出现输出1 5 3 和1 3 5 这种情况了
一、代码展示
#include<iostream>
using namespace std;
const int N=25;
int p[N]; //记录
int n,r;
bool bk[N]; //标记
void dfs(int dep,int pre)
{
if(dep==r+1)
{
for(int i=1;i<=r;i++) cout<<p[i]<<" ";
puts("");
return;
}
for(int i=1;i<=n;i++)
{
//当前这个数没被使用并且小于前面一位数
if(!bk[i] && (i>pre))
{
bk[i]=true;
p[dep]=i;
dfs(dep+1,i-1);
//恢复现场
bk[i]=false;
}
}
}
int main()
{
cin>>n>>r;
dfs(1,0);
return 0;
}