BFS
BFS
algsup
这个作者很懒,什么都没留下…
展开
-
[bfs][dfs]leetcode6182:反转二叉树的奇数层(medium)
思路1:比较直观的方式是使用 bfs 来翻转奇数层的所有节点值,这里需要使用双端队列 deque 来实现,不然使用单向队列 queue 实现容易陷入思想误区。这样来交换奇数层的节点值,同时奇数层的节点值交换是顺着祖先自上而下的,也就是最左边的节点值和最右边的节点值交换,依次向中间靠拢交叉交换的。设计 dfs 需要同时考虑。原创 2022-09-19 09:37:10 · 390 阅读 · 0 评论 -
[dfs][bfs][图论]leetcode6154:感染二叉树需要的总时间(medium)
思路:dfs建图 + dfs 或 bfs 寻找节点 u 出发的最大深度。原创 2022-08-21 20:47:27 · 161 阅读 · 0 评论 -
[BFS][贝祖定理]leetcode365:水壶问题(medium)
思路1:BFS 枚举所的状态。原创 2022-08-20 08:50:28 · 235 阅读 · 0 评论 -
[BFS]leetcode310:最小高度树(medium)
【代码】[BFS]leetcode310:最小高度树(medium)原创 2022-08-19 20:43:35 · 402 阅读 · 0 评论 -
[八数码][BFS]leetcode773:滑动谜题(hard)
思路1:常规 BFS。原创 2022-08-18 10:02:19 · 187 阅读 · 0 评论 -
[多源 bfs]leetcode1162:地图分析(medium)
题目:题解:代码如下:原创 2022-06-05 10:47:43 · 133 阅读 · 0 评论 -
[多源BFS][dp]leetcode542:01矩阵(medium)
题目:解法1:利用BFS广度优先搜索解题。1)将点为0的坐标添加到辅助队列中,并使用map标记该坐标已访问。2)将每个0四周的点(该点的坐标合法且未访问)全部放入队列中,并在map中标记该坐标已访问,然后更新周围点的坐标值(该点坐标+距离1)。代码如下:class Solution {public: vector<int> rowStep = { -1,1,0,0 ......原创 2019-08-11 18:08:45 · 238 阅读 · 0 评论 -
[二叉树][dfs][bfs]leetcode297:二叉树的序列化与反序列化(hard)
题目:题解:原创 2019-08-21 19:36:19 · 330 阅读 · 0 评论 -
[bfs][二叉树]leetcode993:二叉树的堂兄弟节点(easy)
题目:题解:由于要求 x y 处于同一层,很自然想到了用层序遍历,然而题目要求父节点不同,则队列中使用 pair 来保存<当前节点,父节点>即可,若当前节点的值等于 x 或 y,则添加父节点,最后判断 x 和 y 的父节点是否相同。代码如下:using PTT = pair<TreeNode*,TreeNode*>;class Solution {public: // bfs即可。队列中存放pair,pair的第一个元素为当前节点,第二个元素父节点原创 2022-02-18 11:18:45 · 213 阅读 · 0 评论 -
[dfs]l[多源bfs]eetcode130:被围绕的区域(medium)
题目:题解:思路:从边界上的’O’出发,把所有和边界’O’相连的’O’全部染为’A’,这样内陆的’O’最后未被染色,然后再一次遍历网格,遍历到的元素为’A’时还原为’O’,遍历到的元素为’O’时染为’X’,由于每个位置直访问一次,所以不会重现’A’改为’'O再改为’X’的情况。从边界上的’O‘出发既可以使用 dfs,也可以使用多源 bfs。代码如下:int dx[]={1,-1,0,0},dy[]={0,0,1,-1};class Solution {public: //原创 2022-02-13 09:46:51 · 190 阅读 · 0 评论 -
[bfs][dfs]leetcode1020:飞地的数量(medium)
题目:题解:思路:经典的二维矩阵搜索题,写bfs或者dfs都行,写带返回值类型的dfs可能会麻烦点,看代码细节即可。代码如下:int dx[]={1,-1,0,0},dy[]={0,0,1,-1};class Solution {public: int m,n; int numEnclaves(vector<vector<int>>& g) { m=g.size(),n=g[0].size(); int原创 2022-02-12 11:22:14 · 243 阅读 · 0 评论 -
[bfs]leetcode1034:边界着色(medium)
题目:题解:思路:bfs,遍历到边界点时,加入(x,y)即可,最后将所有的边界点进行染色。代码如下:int dx[]={1,-1,0,0},dy[]={0,0,1,-1};bool visited[60][60];class Solution {public: vector<vector<int>> colorBorder(vector<vector<int>>& g, int row, int col, int co原创 2022-01-29 22:44:59 · 561 阅读 · 0 评论 -
[bfs][dfs]leetcode547:省份数量(medium)
题目:题解:思路:本题为图的邻接表存储图,采用 bfs 或者 dfs 来遍历连通分量,统计图中连通分量的个数。代码如下:class Solution{public: // 题目给的是邻接矩阵,然后判断邻接矩阵中的连通块的个数 bool visited[210]; int n,cnt; int findCircleNum(vector<vector<int>>& g) { memset(visited,0,s原创 2022-01-29 22:40:04 · 354 阅读 · 0 评论 -
[多源bfs]leetcode994:腐烂的橘子(medium)
题目:题解:思路:多源 bfs,初试在添加源点时,顺便统计橘子的个数,然后再进行 bfs 时,每扩展一层就减去腐烂的橘子就行了。代码如下:int dx[]={0,0,1,-1},dy[]={1,-1,0,0};using PII = pair<int,int>;class Solution {public: // 思路:从多个烂橘子开始多源bfs,点(x,y)第一次被访问时就是距离它最近的烂橘子扩展到了这里 int orangesRotting(vect原创 2022-01-29 20:48:17 · 675 阅读 · 0 评论 -
[多源bfs]leetcode1765:地图中的最高点(medium)
题目:题解:思路:多源 bfs,从水域开始扩展即可,某个水域第一次到达位置(x,y)时,表示离(x,y)最近的水域扩展到了这个点。代码如下:int dx[]={1,-1,0,0},dy[]={0,0,1,-1};class Solution {public: vector<vector<int>> highestPeak(vector<vector<int>>& g) { int n=g.size(),m原创 2022-01-29 20:42:37 · 380 阅读 · 0 评论 -
[多源bfs]542:01 矩阵(medium)
题目:题解:思路:多源 bfs,将坐标点的值为 0 的点加入队列,然后来更新到数组值为 1 的最短距离,由于每个位置(x,y)第一次被访问时,相等于距离它最近那个起点扩展到了它,此时更新的就是最短距离。代码如下:int dx[]={-1,0,1,0},dy[]={0,1,0,-1};class Solution {public: vector<vector<int>> updateMatrix(vector<vector<int>&g原创 2022-01-29 17:09:06 · 459 阅读 · 0 评论 -
[bfs]leetcode1345:跳跃游戏 IV(hard)
题目:思路:难点:如何建图?由题可知,顶点 i 可以跳向 i+1、i-1 以及所有和 nums[i] 值相同的的点,这表明这些点之间的距离都是 1 的邻接点,且为无向边,而题目要我们求的是起点到终点的最少跳越步数,即从起点到终点的最短距离是多少。对于边权是 1 的无向图,使用 bfs 可以很方便的求最短距离。编码:分析出具体算法后,我们就要确定算法步骤而进行编码了。常规的 bfs 的时间复杂度为O(V+E)O(V+E)O(V+E),V 为顶点数,E 为边数,E 最坏情况下可达到O(原创 2022-01-21 10:47:42 · 3426 阅读 · 1 评论 -
[bfs][dfs]695:岛屿的最大面积(medium)
题目:题解:使用染色法进行dfs即可,采用带返回值的dfs和不带返回值的dfs两种方法都行。代码如下:int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};class Solution {public: int m,n; int maxAreaOfIsland(vector<vector<int>>& grid) { m=grid.size(),n=grid[0].size();原创 2022-01-12 16:58:56 · 189 阅读 · 0 评论 -
[bfs][dfs]leetcode733:图像渲染(easy)
题目:思路:bfs+dfs模板题代码如下:int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};using PII = pair<int,int>;class Solution {public: // 思路1:bfs vector<vector<int>> floodFill_1(vector<vector<int>>& image, int sr, int sc,原创 2022-01-12 16:27:35 · 191 阅读 · 0 评论 -
[多源bfs]leetcode1765:地图中的最高点(medium)
题目:题解:多源 bfs 裸题,《算法竞赛进阶指南》p109 的 矩阵距离 是个模板题学习即可。代码如下:int dx[]={-1,0,1,0},dy[]={0,1,0,-1};using PII = pair<int,int>;class Solution {public: // 题解:多源bfs模板题 vector<vector<int>> highestPeak(vector<vector<int>>原创 2021-02-21 16:12:20 · 293 阅读 · 0 评论 -
[bfs][dfs]剑指 Offer 13. 机器人的运动范围(medium)
题目:题解:bfs dfs 纯模板题。代码如下:// 四个方向数组int dx[]={-1,0,1,0},dy[]={0,1,0,-1};// 标记数组,防止点重复访问bool visited[110][110];using PII = pair<int,int>;class Solution {public: // 题解1:dfs int movingCount_1(int m, int n, int k) { memset(v原创 2021-02-03 17:10:04 · 158 阅读 · 0 评论 -
[bfs][dfs]leetcode547:省份数量(medium)
题目:题解:本题给的是一个无向图的邻接矩阵,而题目要我们求的是该无向图的联通分量数。思路1:dfs用visited数组来标记顶点是否访问访问过,然后我们枚举每个顶点,将枚举到的顶点的邻接点全部加入标记,表示为同一个联通量,直到枚举到的顶点没有邻节点,我们在枚举下一个没有被访问过的顶点。每次访问完一个联通量,将res+1。思路2:bfs与dfs思路是一样的,不过使用队列在存储并访问邻接点,直到队列为空,表示我们找到一个联通量了,将res+1。代码如下:// 用来记录顶点i原创 2021-02-02 00:01:14 · 244 阅读 · 0 评论 -
[bfs][dfs]面试题 16.19. 水域大小(medium)
题目:题解:bfs dfs 纯模板题,思路看代码即可。代码如下:// 方向数组,由于对角线也算水域范围,所以为8个方向int dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1};// 用来标记水域是否被统计过bool flag[1010][1010];class Solution {public: void dfs(vector<vector<int>>& land,int i,int原创 2021-02-01 17:55:29 · 244 阅读 · 0 评论 -
[bfs]leetcode994:腐烂的橘子(easy)
题目:994. 腐烂的橘子题解:bfs模板题与层序遍历思想类试,不过将添加一层的每个节点添加左右子节点转换为一层每个节点添加4个方向的节点而已,代码实现也与层序遍历类试,属于bfs的模板提。代码如下:int dx[]={0,-1,0,1},dy[]={-1,0,1,0};class Solution {public: int orangesRotting(ve...原创 2020-03-04 10:16:22 · 397 阅读 · 0 评论 -
[二叉树的层序遍历]leetcode513:找树左下角的值(medium)
题目:513. 找树左下角的值题解:利用二叉树的层序遍历来寻找最后一层的最左边节点的值,注意进队列方式为从右至左的,这样保证最后的p为最后一层的最左边的节点。代码如下:class Solution {public: //层序遍历:从右至左,这样最后一个节点的值就是最左下角的值 int findBottomLeftValue(TreeNode* root) {...原创 2020-01-10 00:04:43 · 243 阅读 · 0 评论 -
[BFS]leetcode1311:获取你好友已观看的视频(medium)
题目:5305. 获取你好友已观看的视频题目:典型的BFS题,我们直接求出第lever层的朋友,将lever层的朋友添加到map(单词->单词次数)中,然后将map中元素添加到一个vector中,然后进行排序(频率升序排序;若频率相同,则按字典序由小到大),最后结果添加字符串结果。代码如下:using PSI = pair<string, int>;cl...原创 2020-01-06 00:18:34 · 517 阅读 · 0 评论 -
[单向BFS][双向BFS]leetcode127:单词接龙(medium)
思路1:单向 BFS 使用最小步数模型即可,参考。思路2:双向 BFS 两端向中间扩展即可,参考。原创 2019-10-04 11:46:50 · 959 阅读 · 0 评论 -
[单向BFS][双向BFS]leetcode433:最小基因变化(medium)
的算法思路一模一样,只不过套用的知识背景不一样,使用 BFS 得解。原创 2019-10-04 19:52:36 · 292 阅读 · 0 评论