题目
解释
- 递归实现组合型枚举依旧用到DFS
- 与实现排列型枚举不同的是,不需要记录数字的使用情况
- 每进入下一层,从当前层选择的数的后一个数开始选择
图示
代码段
#include<iostream>
using namespace std;
const int N=30;
bool st[N];
int path[N];
int n,m;
void dfs(int u,int start)
{
if(u>m)//层数从1开始,路径长度为0
{
for(int i=1;i<=m;i++)
cout<<path[i]<<' ';
cout<<endl;
}
else
{
for(int i=start;i<=n;i++)//排列不同的是,每次枚举都从下一个没有使用的数开始
{
path[u]=i;
dfs(u+1,i+1);
}
}
}
int main()
{
cin>>n>>m;
dfs(1,1);
}