93. 递归实现组合型枚举
- 剪枝的操作
- puts("");表示换行
- 设置一个开始的位置,下次只能从这次开始,避免了123 132 213 231 312 321这样的算作多个的重复。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 16;
int n,m;
int a[N];
void dfs(int pos,int start)
{
if(pos + n - start < m) return; //剪枝 已经选了pos - 1 个数,还能选 n - start + 1个,总共pos + n - start。如果这个数小于m则说明不够m个数
if(pos==m+1)
{
for(int i=1;i<=m;i++)
cout<<a[i]<<" ";
puts("");
return;
}
for(int i=start;i<=n;i++)
{
a[pos] = i;
dfs(pos+1,i+1);
}
}
int main()
{
cin>>n>>m;
dfs(1,1);
}