AcWing 93. 递归实现组合型枚举
供自己课后复习而已
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 30;
int way[N];//方案数
int n,m;
void dfs(int u,int start){
if(u+n-start<m) return;//不符合条件(一个方案不满三个数)的直接过滤
if(u == m+1)//边界
{
for(int i = 1;i<=m;i++) printf("%d ",way[i]);//输出不同方案数的内容
puts(" ");
return;
}
for(int i = start;i<=n;i++)//填坑,从起始位置开始
{
way[u] = i;//填坑
dfs(u+1,i+1);//递归遍历
//恢复现场
way[u] = 0;
}
}
int main(){
cin>>n>>m;
dfs(1,1);
return 0;
}