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

相关推荐
呱牛do it9 分钟前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
极客智造1 小时前
C++ 标准 IO 流全详解:cin /cout/get /getline 原理、用法、区别与避坑
c++·io
charlie1145141911 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机
aini_lovee1 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
消失的旧时光-19431 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
yong99901 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5051 小时前
深入理解主成分分析(PCA)
算法
NE_STOP1 小时前
Redis--发布订阅命令和Redis事务
java
apollowing1 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
PAC_3Dame1 小时前
记一次真实的线上OOM
java