#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