力扣每日一题(五十七——广(深)度优先遍历算法(关二维平面搜索问题))

仅以此纪录每日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[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值