广度优先搜索(BFS)

广度优先搜索一般使用队列实现

对于需要计算树高度(层数):可通过先计算队列内元素个数,每次循环完一波计算过个数的元素,层数加一计算。

典型例题:

https://leetcode-cn.com/problems/as-far-from-land-as-possible/

有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。

我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0 - x1| + |y0 - y1| 。

解法:

import numpy as np
class Solution:
    def maxDistance(self, grid: List[List[int]]) -> int:
        gridlen=len(grid)
        queue=[]
        for i in range(gridlen):
            for j in range(gridlen):
                if grid[i][j]==1:
                    queue.append((i,j))
        if queue==[] or len(queue)==gridlen*gridlen:
            return -1
        deepth=-1
        while queue:
            deepth+=1
            n=len(queue)
            for z in range(n):
                i,j=queue.pop(0)
                for x,y in [(i-1,j),(i+1,j),(i,j-1),(i,j+1)]:
                    if x>=0 and x<gridlen and y>=0 and y<gridlen:
                        if grid[x][y]==0:
                            queue.append((x,y))
                            grid[x][y]=2
        return deepth

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值