仅以此纪录每日LeetCode所刷题目。
题目描述:
示例:
思路:
这道题需要同时使用BFS + DFS,因为题目中已经明确说明图中含有两座岛,因此我们首先使用DFS搜索出其中的任意一座岛屿,将这座岛屿的坐标放在一个队列中,下一步我们使用BFS,一个格子一个格子的向外扩充,如果某次碰到了另外一个岛屿,则返回对应的step即可。
代码:
class Solution:
def shortestBridge(self, grid: List[List[int]]) -> int:
def dfs(i,j):
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] == 0 or grid[i][j] == 2:
return
else:
grid[i][j] = 2
q.append((i,j))
for x,y in dirs:
new_x = x+i
new_y = y+j
dfs(new_x,new_y)
def bfs(i,j):
steps = 0
while q:
size = len(q)
for _ in range(size):
i,j = q.popleft()
for x,y in dirs:
new_x = i + x
new_y = j + y
if new_x < 0 or new_x >= len(grid) or new_y < 0 or new_y >= len(grid[0]) or grid[