递归实现指数型枚举

  • Post author:
  • Post category:其他


题述

在这里插入图片描述

输入输出

在这里插入图片描述

数据范围

在这里插入图片描述

样例

在这里插入图片描述

代码

//非递归:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    cin>>n;
    cout<<endl;
    for(int i=1;i<pow(2,n);i++)
    {
        int temp=i;
        int k=1;
        while(temp)
        {
            if(temp&1)cout<<k<<" ";
            temp>>=1;
            k++;
        }
        cout<<endl;
    }
}

//递归实现:
#include <iostream>
#include <vector>
using namespace std;

int n;
vector<int> closen; //! 被选择的数

void dfs(int u)
{
    if(u == n + 1)
    {
        for(int i = 0; i < closen.size(); i++)
        {
            if(i > 0) printf(" ");
            printf("%d", closen[i]);
        }
        puts("");
        return;
    }
    //!  选择的分支
    closen.push_back(u);
    dfs(u + 1);
    closen.pop_back();
    //! 不选的分支
    dfs(u + 1);
}

int main(void)
{
    scanf("%d", &n);
    dfs(1);
    return 0;
}



版权声明:本文为qq_57968062原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。