优选算法系列(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 解决即可

相关推荐
努力学算法的蒟蒻3 分钟前
day58(1.9)——leetcode面试经典150
算法·leetcode·面试
txinyu的博客6 分钟前
HTTP服务实现用户级窗口限流
开发语言·c++·分布式·网络协议·http
代码村新手7 分钟前
C++-类和对象(上)
开发语言·c++
rgeshfgreh14 分钟前
Spring事务传播机制深度解析
java·前端·数据库
无名-CODING15 分钟前
Java Spring 事务管理深度指南
java·数据库·spring
xiaolyuh12316 分钟前
Spring MVC Bean 参数校验 @Validated
java·spring·mvc
txinyu的博客18 分钟前
map和unordered_map的性能对比
开发语言·数据结构·c++·算法·哈希算法·散列表
蕨蕨学AI22 分钟前
【Wolfram语言】45.2 真实数据集
java·数据库
搞笑症患者32 分钟前
压缩感知(Compressed Sensing, CS)
算法·最小二乘法·压缩感知·正交匹配追踪omp·迭代阈值it算法
im_AMBER36 分钟前
Leetcode 101 对链表进行插入排序
数据结构·笔记·学习·算法·leetcode·排序算法