
搜索
搜索算法
Charming Boy
苟有恒,何必三更眠五更起;
最无益,莫过一日曝十日寒。
展开
-
对比DFS、BFS求连通块问题
许多连通块问题既可以用BFS求解也可以用DFS求解,两者各有优缺点。BFS求解:可以求出最短路或者判断两者是否连通,不存在爆栈的风险,但空间相对用的多一些而且代码相对来说繁琐一些。DFS求解:DFS代码简洁,相对好写一些,但存在爆栈的风险,而且不能求出最短路。原创 2020-07-16 12:01:31 · 826 阅读 · 1 评论 -
双向BFS(字串变换)
双向搜索——从初态和终态出发各搜索一半状态,产生两棵深度减半的搜索树,在中间交会、组合成最终的答案。双向BFS——从起始状态、目标状态分别开始,两边轮流进行,每次各扩展一整层,当两边各自有一个状态在记录数组中发生重复时,就说明这两个搜索过程相遇了,可以合并得出起点到终点的最小步数字串变换双向BFS的时间复杂度分析:假设字符串长度为L,替换规则一共N个,最坏情况下,使用N种规则,总共有LN种扩展方式,题目要求最多10步,则从起点和终点最多会扩展5步,所以搜索空间是2(LN) ^ 5#include原创 2020-07-14 10:56:08 · 424 阅读 · 0 评论 -
双端队列BFS(电路维修 deque)
基本的广搜每次扩展都记一步,通过逐层搜索解决了求起始状态到每个状态的最少步数问题。等价于在一张边权均为1的图上执行BFS,每个状态在第一次被访问并入队时,计算出的步数即为所。当图上的边权是1、0两种状态时,就需要用到双端队列来保证队列的两段性和单调性。原创 2020-07-13 09:17:35 · 594 阅读 · 2 评论 -
最小步数模型(魔板 - BFS)
前言:本文简单介绍unordered_map的一些用法和原理以及最小步数模型问题的求解原创 2020-07-12 10:01:13 · 502 阅读 · 0 评论 -
多源BFS(图的广搜)
单源BFS就是树的广搜思路,把根节点入队,然后一层层的遍历多源BFS就是图的广搜思路,可以多个源点入队,为防止某个点入队多次,需要标记,多源BFS一般用于解决下面这种多源点问题,会提高代码执行效率。原创 2020-07-11 19:32:43 · 874 阅读 · 0 评论 -
Flood Fill(漫水法)+ 最短路模型
文章目录对于一张地图,使用Flood Fill就可以找到最大连通子图,可以使用BFS、DFS来实现,这里使用BFS演示。可以在线性时间复杂度(O(nm))内,找到某个点所在的连通块(所有边权重相等)例题:城堡问题图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成 m∗n个方格区域,每个方格区域可以有0~4面墙。注意:墙体厚度忽略不计。输入格式第一行包含两个整数 m 和 n,分别表示城堡南北方向的长度和东西方向的长度。接下来 m 行,原创 2020-07-06 17:55:18 · 1251 阅读 · 2 评论 -
八皇后问题(DFS和递归)
八皇后问题:在棋盘上放置8个皇后,是它们互不攻击,此时每个皇后的攻击范围为同行同列和同对角线,所以不能让它们处于同行、同列和同对角线。输出所有情况的棋盘。由于很多子结点不符合条件,可以在递归时候中途停止并返回,这个思路就是回溯,在回溯中用于减少子结点扩展的部分叫剪枝。解决此问题的关键就是如何递归和回溯,难度主要在于扩展子结点的时候如何构造停止递归并返回的条件。解题思路就是按行枚举Q, ...原创 2020-02-23 18:13:32 · 3116 阅读 · 1 评论 -
走迷宫(BFS)
文章目录数组模拟queuepython打印路径题目描述给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁。最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。数据保证(1, 1)处和(n, m)处的数字为0,且一定至...原创 2020-03-16 21:10:31 · 568 阅读 · 2 评论