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

相关推荐
CSCN新手听安1 分钟前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
CSCN新手听安7 分钟前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
m0_736919107 分钟前
C++中的委托构造函数
开发语言·c++·算法
小小小小王王王13 分钟前
洛谷-P1886 【模板】单调队列 / 滑动窗口
c++·算法
callJJ22 分钟前
Spring AI 文本聊天模型完全指南:ChatModel 与 ChatClient
java·大数据·人工智能·spring·spring ai·聊天模型
CBeann22 分钟前
企业级规则引擎落地实战:动态脚本引擎 QLExpress ,真香!
java·ai·大模型·规则引擎·qlexpress·大厂实战项目
懈尘23 分钟前
从 Java 1.7 到 Java 21:逐版本深入解析新特性与平台演进
java·开发语言
亓才孓23 分钟前
[Maven]Maven基础
java·maven
hello 早上好27 分钟前
05_Java 类加载过程
java·开发语言
PPPPPaPeR.39 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法