每日一题已经出了很多关于多点BFS
的题目,但是今天我在做这个题目的时候并没有做出来,看了官方的题解才多对多点的BFS
有更深的感悟,这也是第一次感觉到官方题解写的很棒。
542. 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1:
输入:
1
2
3
4 > 0 0 0
> 0 1 0
> 0 0 0
>
输出:
1
2
3
4 > 0 0 0
> 0 1 0
> 0 0 0
>
示例 2:
输入:
1
2
3
4 > 0 0 0
> 0 1 0
> 1 1 1
>
输出:
1
2
3
4 > 0 0 0
> 0 1 0
> 1 2 1
>
注意:
- 给定矩阵的元素个数不超过 10000。
- 给定矩阵中至少有一个元素是 0。
- 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
官方的题解很不错特别是图官方题解
题目解释: 对于矩阵中的每一个元素,如果它的值为 0,那么离它最近的 0 就是它自己。如果它的值为 1,那么我们就需要找出离它最近的 0,并且返回这个距离值。
为了方便解释我会使用题解中的图
由于每个入队的0是同时向周围扩张的所以最先修改的距离就是最短的距离
正如官方题解给出的超级零
的概念,就是将首先入队的所有的0
看做成一个0.
熟悉「最短路」的读者应该知道,我们所说的「超级零」实际上就是一个「超级源点」。在最短路问题中,如果我们要求多个源点出发的最短路时,一般我们都会建立一个「超级源点」连向所有的源点,用「超级源点」到终点的最短路等价多个源点到终点的最短路。
1 | class Solution { |