注意这里必须是从大到小排列,这道题类似于数的全排列,可以用简单的dfs就能解决
完整代码如下:
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#define MAX 15
using namespace std;
int n,m;
bool book[MAX];
int a[MAX];
/*这类似于数的全排列,step代表当前这个位置,即到这个位置放的数为多少,当m个位置都放完数后,就
输出,然后再回溯一下。*/
void dfs(int cur,int step){
if(step == m+1)
{
for(int i=1;i<=m;i++)
printf("%d",a[i]);
printf("\n");
return;
}
for(int i=cur;i>=1;i--)//注意由于是从大到小排列的,故这里从比当前数小的里面找。
{
a[step] = i;
dfs(i-1,step+1);
}
}
int main(void)
{
scanf("%d %d",&n,&m);
dfs(n,1);
return 0;
}