DFS BFS 搜索题目归纳

数据结构 空间 是否具有最短路特性 备注
DFS stack O ( h ) O(h) O(h) 通常要回溯、剪枝,对空间要求比较高的用DFS
BFS queue O ( 2 h ) O(2^h) O(2h) 最少步数、最短距离、最少操作几次

DFS

深搜(dfs)框架
参考:https://blog.csdn.net/weixin_45559159/article/details/104187523

void dfs(int x)//关于传入参数问题,根据题意而定,看在程序运行的过程中,哪些是在变的
{
    if(满足输出条件)
    {
        输出解;
        return ;
    }
    //剪枝操作
    if(目前已经没有必要进行下去的条件){
        return ;
    }
    //如果传入的条件,还需要继续搜下去,分析每一种情况后面跟哪些情况,然后循环,每个情况(注意前提:得符合题意)都深搜一下
     for(int i=1;i<=每种情况数;i++)
            if(满足进一步搜索条件)//判断是否合理
            {
                为进一步搜索所需要的状态打上标记;//是需要的状态
                dfs(t+1);
                恢复到打标记前的状态;//也就是说的{回溯一步}
            }
    }
}

DFS最重要的就是要考虑搜索顺序
每个题目最好画一下递归搜索树,便于理解
例题一:(输出不同方案,也可输出方案的总数)
AcWing 842. 排列数字【DFS】

例题二:(输出不同方案,也可输出方案的总数)
AcWing 843. n-皇后问题【DFS】【剪枝】

例题三:(输出不同方案,也可输出方案的总数)
AcWing 92. 递归实现指数型枚举【DFS】【递归】

例题四:(输出不同方案,也可输出方案的总数)
AcWing 94. 递归实现排列型枚举【DFS】【递归】

例题五:(输出不同方案,也可输出方案的总数)
AcWing 93. 递归实现组合型枚举【DFS】【递归】

例题七:(不同的方案数)
AcWing 1209. 带分数【DFS】【递归】【剪枝】【第四届蓝桥杯省赛C++B/C组,第四届蓝桥杯省赛JAVAA/B组】

例题八:(从初始位置出发能到达的瓷砖数、FloodFill)
AcWing 1113. 红与黑【《信息学奥赛一本通》】【DFS】【BFS】【Flood Fill】

例题九:(连通块的个数、FloodFill)
AcWing 1233. 全球变暖【FloodFill】【BFS】【DFS】

例题十:(最多花费的路费是多少)
AcWing 1207. 大臣的旅费【第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVAA组】【树的直径】【BFS】【DFS】【树形DP】

例题十一:(从起点坐标到终点坐标的方案总数)
洛谷 P1605 迷宫【搜索】【DFS】【BFS】

例题十二:(输出所有可行的路径,即所有不同方案)
洛谷 P1238 走迷宫【搜索】【DFS】


BFS

宽搜(bfs)框架

一、 判重数组st[] 一般入队时判重(保证每个点只会入队一次,从而保证时间复杂度是线性的) (特殊情况出队时判重,如A*算法、Dijkstra算法)
二、 queue
  1. queue ← \leftarrow 初始状态
  2. while (queue非空)
   {
     t ← \leftarrow 队头元素
     队头元素出队列
 
     for (扩展t)
     {
       ver ← \leftarrow 新节点
       if (!st[ver])
       {
         ver → \rightarrow 队尾
       }
     }
   }

宽搜(bfs)本质从一个状态扩展到另一个状态。不同宽搜题目的不同点在于状态的定义
主要有两大类, 第一类走迷宫类问题,矩阵的每一个格子是一个状态;第二类是八数码、数独类问题,整个矩阵(一个数组)是一个状态,每次枚举它能变成什么状态


例题一:(最少移动次数)
AcWing 844. 走迷宫【BFS】

例题二:(最少交换次数)
AcWing 845. 八数码【BFS】

例题三:(最少需要多少时间就能吃到奶酪)
AcWing 1101. 献给阿尔吉侬的花束【《信息学奥赛一本通》】【bfs】【bfs框架】

例题四:(从初始位置出发能到达的瓷砖数、FloodFill)
AcWing 1113. 红与黑【《信息学奥赛一本通》】【DFS】【BFS】【Flood Fill】

例题五:(逃脱所需最短时间)
AcWing 1096. 地牢大师【《信息学奥赛一本通》】【三维地图BFS】

例题六:(连通块的个数、FloodFill)
AcWing 1233. 全球变暖【FloodFill】【BFS】【DFS】

例题七:(最多花费的路费是多少)
AcWing 1207. 大臣的旅费【第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVAA组】【树的直径】【BFS】【DFS】【树形DP】

例题八:(从起点坐标到终点坐标的方案总数)
洛谷 P1605 迷宫【搜索】【DFS】【BFS】

你可能感兴趣的:(搜索,算法,数据结构,bfs,dfs,搜索)