优选算法系列(8.多源BFS)

简介·:

01 矩阵(medium):

题目链接: 542. 01 矩阵 - 力扣(LeetCode)

算法:
对于求的最终结果,我们有两种方式:

  • 第⼀种方式:从每⼀个 1 开始,然后通过层序遍历找到离它最近的 0 。这⼀种方式,我们会以所有的 1 起点,来⼀次层序遍历,势必会遍历到很多重复的点。并且如果矩阵中只有⼀个 0 的话,每⼀次层序遍历都要遍历很多层,时间复杂度较高·。
  • 换⼀种方式:从 0 开始层序遍历,并且记录遍历的层数。当第⼀次碰到 1 的时候,当前的层数就是这个 1 离 0 的最短距离。 这⼀种方式,我们在遍历的时候标记⼀下处理过的 1 ,能够做到只用遍历整个矩阵⼀次,就能得到最终结果。

但是,这里有⼀个问题, 0 是有很多个的,我们怎么才能保证遇到的 1 距离这⼀个 0 是最近的呢?
其实很简单,我们可以先把所有的 0 都放在队列中,把它们当成⼀个整体,每次把当前队列里面的所有元素向外扩展⼀次。

第一层:

第二层:

第三层:
C++:

java:

飞地的数量(medium)

题目链接:1020. 飞地的数量 - 力扣(LeetCode)

算法:
正难则反:

  • 从边上的 1 开始搜索,把与边上 1 相连的联通区域全部标记⼀下;
  • 然后再遍历⼀遍矩阵,看看哪些位置的 1 没有被标记即可

标记的时候,可以⽤「多源 bfs 」解决。
和 算法系列6 中的 被围绕的区域(medium) 差不多,那里使用的是单源BFS
C++:

Java:

地图中的最高点(medium)

题目链接:1765. 地图中的最高点 - 力扣(LeetCode)


算法;

01矩阵的变型题,直接用多源 bfs 解决即可。

地图分析(medium):

题目链接: 1162. 地图分析 - 力扣(LeetCode)


算法:
01矩阵的变型题,直接⽤多源 bfs 解决即可

相关推荐
没头脑的男大2 分钟前
关于删除列表的那些事儿
算法
Book思议-12 分钟前
【数据结构实战】线性表的应用
c语言·数据结构·算法·链表
鬼蛟12 分钟前
Spring————事务
android·java·spring
qq_4614893314 分钟前
C++与Qt图形开发
开发语言·c++·算法
Yzzz-F31 分钟前
Problem - 2194E - Codeforces
算法
像污秽一样31 分钟前
算法设计与分析-习题12.2
算法·迭代改进·分支界限
x_xbx38 分钟前
LeetCode:83. 删除排序链表中的重复元素
算法·leetcode·链表
西门吹-禅1 小时前
【sap fiori cds up error】
java·服务器·sap cap cds
_小草鱼_1 小时前
【搜索与图论】DFS算法(深度优先搜索)
算法·深度优先·图论·回溯·递归
敲代码的嘎仔1 小时前
Java后端面试——SSM框架面试题
java·面试·职场和发展·mybatis·ssm·springboot·八股