
#include <iostream>
using namespace std;
int n, m;
void dfs(int u, int sum, int state)
{
// 判断边界条件
// 如果加上剩余的数都不够m个,直接return
if(sum + n - u < m) return ;
// 当达到m个数的时候
if(sum == m)
{
for(int i = 0; i < n; ++ i)
if(state >> i & 1)
cout << i + 1 << " ";
cout << endl;
return ;
}
dfs(u + 1, sum + 1, state | 1 << u); // 选第u个数
dfs(u + 1, sum, state); // 不选第u个数
}
int main()
{
cin >> n >> m;
dfs(0, 0, 0); // 从哪个数开始,当前选了几个数, 状态(哪几个数被选中)
return 0;
}
原文:https://www.cnblogs.com/mjn1/p/11748971.html