AC_92. 递归实现指数型枚举

代码:

#include<iostream>
#include<cstring>
using namespace std;
//从前往后 选或者不选
int N;
void dfs(int u, int state)
{
    if (u == N)//所有数枚举完了
    {
        for (int i = 0; i < N;i++)
        if (state >> i & 1)//state的第i位是否为1
            cout << i + 1 <<" ";
        cout << endl;
        return;
    }
    dfs(u + 1, state);//不用这个数
    dfs(u + 1, state | 1 << u);//用这个数  state的第u位置为1
}
int main()
{
    cin >> N;
    dfs(0, 0);
    return 0;
}

 

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
//从前往后 选或者不选
int N;
//时间复杂度  2^n 2^15=3W

void dfs(int u, int state)
{
    if (u == N)//当枚举到第N个数的话,所有的数已经枚举完了
    {
        for (int i = 0; i < N; i++)
        {
            if (state >> i & 1)//state的第i位是否为1,用位运算记录状态
                cout << i + 1 << " ";
        }
        cout << endl;
        return;
    }
    dfs(u + 1, state);
    dfs(u + 1, state | 1 << u);//state的第u位置成1
}

int main()
{
    cin >> N;
    dfs(0, 0);//枚举到了第几个数  表示哪些数已经被用过了
    return 0;
}

 

posted @ 2019-07-09 16:19  A-inspire  Views(365)  Comments(0Edit  收藏  举报