蓝桥杯——1.1递归实现指数型枚举

题目:

在这里插入图片描述

AC代码:

#include <iostream>
#include <algorithm>

using namespace std;

int n;
const int N = 16;
int st[N];
int path[N];

void dfs(int u)
{
    
    
    if (u == n)         // 当从0开始的时候,其实第一层是不管的,因此
    {
    
                       // 终止条件就是当 u = n 的时候
        for (int i = 0; i < n; i ++)
            if (st[i] == 1)
                cout << path[i] << " ";
        cout << endl;
        return ;
    }
    
    // 选择这个位置的数
    path[u] = u + 1;    // 存路径数组
    st[u] = 1;          // 1表示选择这个数
    dfs(u + 1);
    
    // 恢复现场
    path[u] = 0;
    st[u] = 0;          // 0表示这一层还没有被选过
    
    // 不选择这个数
    st[u] = 2;
    dfs(u + 1);
}

int main()
{
    
    
    cin >> n;
    
    dfs(0);             // 我们先研究有几棵dfs树,很显然,这里只有一棵树
    
    return 0;
}




// 易理解版本
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 16;

int n;
int st[N];

vector<vector<int>> ways;

void dfs(int u)
{
    
    
    if (u == n + 1)
    {
    
    
        vector<int> way;
        for (int i = 1; i <= n; i ++)  
            if (st[i] == 1)             // 如果这一层被选择过
                way.push_back(i);
        ways.push_back(way);            // 注意将每棵树存进一个大的vector中
        
        return ;
    }
    
    st[u] = 2;                          // 不选择
    dfs(u + 1);
    st[u] = 0;
    
    st[u] = 1;                          // 选择
    dfs(u + 1);
    st[u] = 0;
}

int main()
{
    
    
    cin >> n;
    
    dfs(1);
    
    for (int i = 0; i < ways.size(); i ++)      // 我们用一个vector来存有几棵dfs树
    {
    
    
        for (int j = 0; j < ways[i].size(); j ++)// 每棵树的路径
            cout << ways[i][j] << " ";
        cout << endl;
    }
    
    return 0;
}

补充:

1、由数据范围反推时间复杂度
在这里插入图片描述

  • 2、常见需要记忆数字
    2 10 = 1000000 2^{10} = 1000000 210=1000000 10万

    2 16 = 25536 2^{16} = 25536 216=25536

    2 15 = 32768 2^{15} = 32768 215=32768

    2 63 = 1000 万 ( 1 0 8 ) 2^{63} = 1000万 (10 ^ 8 ) 263=1000(108)

  • 3、最常见的四个头文件

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

猜你喜欢

转载自blog.csdn.net/weixin_57095511/article/details/121347168