题目
BFS解法1:
这是个典型的BFS题目,虽然DFS也可以解,但是都已经明确说了四个方向,那么当然是BFS更make sense,要求的目标就是BFS向外扩张的次数。但是普通的BFS在搜索的时候是不会track现在所在的level的,也就是扩张的第几步,为了track这个level可以这么做。
- 对于每个level,新建一个空的list,然后同level的位置放入同一个列表,一次搜索将同level的所有位置都搜索完毕,然后minute加1
- 搜索结束后再遍历一遍所有的位置,若还有1剩下,则返回-1,否则返回前面计算的BFS扩张步数
- 值得注意的是,初始的minute值应该是-1,或者说最后减1,因为到最后一个level并不会继续扩张
python代码如下:
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
m,n = len(grid),len(grid[0])
q = collections.deque()
init_pos = []
for i in range(m):
for j in range(n):
if grid[i][j] == 2:
init_pos.append((i,j))
q.append(init_pos)
dirs = [[0,1],[0,-1],[1,0<