冲刺蓝桥杯-DFS板块(第一天)

DFS的三种枚举

指数型枚举
cpp 复制代码
//递归  DFS最重要的是顺序
//顺序:从1~n依次考虑每个数 选/不选
#include <bits/stdc++.h>

using namespace std;

const int N =20;
int n;
int st[N];//记录每个数的状态,0表示还没考虑,1表示选,2表示不选

void dfs(int x){//x表示枚举到了当前的那个位置
    if(x>n){
        for(int i=1;i<=n;i++){
            if(st[i]==1)
            cout << i << " ";
        }
        cout << endl;
        return;
    }
    
    //选
    st[x]=1;//上来先选
    dfs(x+1);//下一个数
    st[x]=0;//恢复现场
    //不选
    st[x]=2;//上来先不选
    dfs(x+1);//下一个数
    st[x]=0;//恢复现场
    
}

int main(){
    cin >> n;
    dfs(1);
    
    return 0;
}
排列型枚举
cpp 复制代码
//依次枚举每个位置应该放那个数
#include <bits/stdc++.h>

using namespace std;

const int N = 10;

bool st[N];//某个数是否被用过true表示选过false表示没有选过
int a[N];
int n;
//x表示当前枚举到了那个位置
void dfs(int x){
    if(x>n){
        for(int i=1;i<=n;i++){
            cout << a[i] << " ";
        }
        cout << endl;
        return;
    }
    
    for(int i=1;i<=n;i++){
        if(!st[i]){//如果没有被选过
            st[i]=true;
            a[x]=i;
            dfs(x+1);//判断下一个数
            a[x]=0;
            st[i]=false;
        }
    }
    
    
}

int main(){

    cin >> n;
    dfs(1);
    
    return 0;
}
组合型枚举
cpp 复制代码
//依次枚举每个位置上放那个数
#include <bits/stdc++.h>

using namespace std;

int n,m;
const int N  = 21;
int a[N];//记录都选了那些数

void dfs(int x,int start){//分别用来记录当前枚举到了那个位置,以及当前位置从几开始枚举
    
    if(x>m){
        for(int i=1;i<=m;i++) cout << a[i] << " ";
        cout << endl;
        return;
    }
    
    for(int i=start;i<=n;i++)
    {
        a[x]=i;
        dfs(x+1,i+1);
        a[x]=0;
        
    }
}


int main(){
    cin >> n >>m;
    
    dfs(1,1);
    
    return 0;
}

这个博主讲的十分细致值得深度了解学习,非常推荐,家人们!!!
【递推与递归 + DFS | 手把手带你画出递归搜索树】 https://www.bilibili.com/video/BV1S24y1p7iH/?share_source=copy_web&vd_source=214f528e7195022e9e1787511eda8c5a

相关推荐
OOJO4 小时前
c++---list介绍
c语言·开发语言·数据结构·c++·算法·list
别或许5 小时前
1、高数----函数极限与连续(知识总结)
算法
田梓燊5 小时前
code 560
数据结构·算法·哈希算法
笨笨饿5 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
kobesdu6 小时前
综合强度信息的激光雷达去拖尾算法解析和源码实现
算法·机器人·ros·slam·激光雷达
weixin_413063216 小时前
记录 MeshFlow-Online-Video-Stabilization 在线稳像
算法·meshflow·实时防抖
会编程的土豆6 小时前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
炘爚6 小时前
深入解析printf缓冲区与fork进程复制机制
linux·运维·算法
迈巴赫车主7 小时前
蓝桥杯19724食堂
java·数据结构·算法·职场和发展·蓝桥杯
6Hzlia8 小时前
【Hot 100 刷题计划】 LeetCode 78. 子集 | C++ 回溯算法题解
c++·算法·leetcode