#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 30;
int n, m;
int position[maxn];
// pos标识m个空中的当前位置,index标识在n个数中遍历的起始位置
void dfs(int pos, int index){
// 若将剩余的n-index个数全部填入仍旧小于m,则直接返回
if(pos+n-index+1 < m){
return;
}
// m个位置已经填满,直接输入m个数
if (pos > m){
for(int i = 1; i <= m; i++){
printf("%d ", position[i]);
}
printf("\n");
return;
}
// 从index位置开始,将往后的n-index+1个数依次尝试填入pos位置中
for (int i = index; i <= n; i++){
position[pos] = i;
// 继续向后递归
dfs(pos+1, i+1);
}
}
int main(){
scanf("%d%d", &n, &m);
dfs(1, 1);
return 0;
}
93. 递归实现组合型枚举
最新推荐文章于 2023-03-31 22:26:51 发布