典型的BFS题目。
class Solution:
def getFood(self, grid: List[List[str]]) -> int:
Row = len(grid)
Col = len(grid[0])
initx = inity = -1
for i in range(Row):
for j in range(Col):
if grid[i][j] == "*":
initx = i
inity = j
dirt = [(1,0),(0,1),(-1,0),(0,-1)]
que = collections.deque()
que.append((initx, inity))
step = 1
seen = set()
seen.add((initx,inity))
while que:
size = len(que)
#print(que)
for _ in range(size):
x,y = que.popleft()
for dx,dy in dirt:
newx = x + dx
newy = y + dy
if 0 <= newx < Row and 0 <= newy < Col and (newx, newy) not in seen:
if grid[newx][newy] == '#':
return step
elif grid[newx][newy] == 'O':
que.append((newx, newy))
seen.add((newx,newy))
elif grid[newx][newy] == 'X':
seen.add((newx,newy))
step += 1
return -1