题目
解析:
这道题目实际上是求两个岛的最短距离。 主要的思路应该是,找到其中一个岛,然后从其中一个岛出发,利用BFS不断扩张,直到碰到第二个岛。因为bfs在扩张的时候可以理解为从岛的边界一层一层的往外扩张,而最先碰到第二个岛的那个边界点,就是离第二个岛最近的点。具体流程如下:
- 用dfs或者bfs找到其中任意一个岛,并记录这个岛的所有边界点
- 利用之前所记录的边界点为起点,一层层向外扩张。这边要注意的是,一次扩张需要将所有的边界点都遍历一次,这样才是所有的点都向外走一步,每扩张一圈,距离加一。
python代码如下:
class Solution:
def shortestBridge(self, A: List[List[int]]) -> int:
def fill_island(i,j):
if i<0 or i>=len(A) or j<0 or j>=len(A[0]) or A[i][j]==2:
return
if A[i][j] == 0:
points.append((i,j))
return
A[i][j] = 2
fill_island(i+1,j)
fill_island(i-1,j)
fill_island(i,j+1)
fill_island(i,j-1)
found = False
points = collections.deque()
for i in range(len(A)):
if found:
break
for j in range(len(A[0])):
if A[i][j] == 1:
fill_island(i,j)
found = True
break
dis = 0
while points:
dis += 1
num_points = len(points)
for i in range(num_points):
curr = points.popleft()
dirs = [[0,1],[0,-1],[1,0],[-1