leetcode 934. Shortest Bridge 最短的桥 (中等)
一、题目大意
标签: 搜索
https://leetcode.cn/problems/shortest-bridge
在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)
现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。
返回必须翻转的 0 的最小数目。(可以保证答案至少是 1 。)
示例 1:
输入:A = [[0,1],[1,0]]输出:1
示例 2:
输入:A = [[0,1,0],[0,0,0],[0,0,1]]输出:2
示例 3:
输入:A = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]输出:1
提示:
2 <= A.length == A[0].length <= 100
A[i][j] == 0 或 A[i][j] == 1
二、解题思路
给一个二维的矩阵,0 表示海洋 1 表示陆地,上面一共有两个小岛,由竖连接着的 1 组成的。现在填多少格子让两个小岛连在一起。这道题可以看成多起点多终点的最短路径问题。这种情况我们可以使用 BFS(广度优先搜索),把起点全部 push 到队列里面去,下一步走到终点上的放就找到路径了,就是一个 BFS 找最短路径的问题。前提是知道哪部分是起点,哪部分是终点。起点我们可以使用 DFS 来找,找到小岛后标记成 2。然后往外扩展,每次往外扩一层,直到碰到 1 为止。
以题目中的示例 2 为例,如上图左上角第二个。使用 DFS 找到第 1 个小岛后标记成 2,放到 queue 里去,这是起点。然后用 BFS 去扩展,使小岛面积不断的扩大,每次往外扩一层,直到碰到 1 为止。上图当扩展到第 3 步即第 3 层的时候碰到 1 了,说明找到了路径了,即两个岛的最短距离为 3-1=2。
三、解题方法
3.1 Java 实现
四、总结小记
2022/6/7 要总结一些模板
版权声明: 本文为 InfoQ 作者【okokabcd】的原创文章。
原文链接:【http://xie.infoq.cn/article/d77b43b9bde99eca87b6f642d】。文章转载请联系作者。
评论