广度优先搜索一般使用队列实现
对于需要计算树高度(层数):可通过先计算队列内元素个数,每次循环完一波计算过个数的元素,层数加一计算。
典型例题:
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