简介·:

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 解决即可