AC_93. 递归实现组合型枚举

代码:

#include<iostream>
#include<cstring>
using namespace std;
//从前往后 选或者不选
int N;
int M;
void dfs(int u, int sum,int state)
{
    if (sum + N - u < M)//后面的数都选上都达不到M要求
        return;
    if (sum == M)//选了M个数
    {
        for (int i = 0; i < N;i++)
        if (state >> i & 1)
            cout << i + 1 << " ";
        cout << endl;
        return;
    }
    if (u == N)return;//没必要
    //从小到大  先选
    dfs(u + 1, sum + 1, state | 1 << u);//用这个数  state的第u位置为1
    dfs(u + 1, sum, state);//不用这个数

}
int main()
{
    cin >> N >> M;
    dfs(0, 0, 0);//枚举多少个  选了多少个 当前选了哪些数
    return 0;
}
原文地址:https://www.cnblogs.com/gcter/p/11158442.html