网格搜索问题的最大递归深度误差



我已经为Leetcode问题编写了一个潜在的解决方案,但我遇到了涉及最大递归深度的错误。我真的不确定我做错了什么。以下是我尝试写的内容:

def orangesRotting(grid):
R,C = len(grid), len(grid[0])
seen = set()
min_time = 0

def fresh_search(r,c, time):
if ((r,c,time) in seen or r < 0 or c < 0 or r >= R or c >= C or grid[r][c] == 0):
return
elif grid[r][c] == 2:
seen.add((r,c,0))
elif grid[r][c] == 1:
seen.add((r,c, time + 1))

fresh_search(r+1,c,time+1)
fresh_search(r-1,c,time+1)
fresh_search(r,c+1,time+1)
fresh_search(r,c-1,time+1)      

for i in range(R):
for j in range(C):
if grid[i][j] == 2:
fresh_search(i,j,0)

for _,_,t in list(seen):
min_time = max(min_time,t)

return min_time

即使在像grid = [[2,1,1], [1,1,0], [0,1,1]]这样的简单输入上。违规行似乎总是在if语句处

if ((r,c,time) in seen or r < 0 or c < 0 or r >= R or c >= C or grid[r][c] == 0):

请注意,我并不是在寻求解决问题的帮助,只是理解为什么我会遇到这个巨大的递归问题。为了参考,这里是问题的链接。如有任何帮助,我们将不胜感激。

所以让我们跟踪一下您在这里做了什么。遍历整个网格,如果该单元格的值为2,则调用该单元格的fresh_search。我们将从[0,0]开始

fresh_search中,您将时间为0的单元格添加到您的集合中。

现在,对于所有相邻的小区,您称之为fresh_search,所以我们只看r+1。对于r+1,方法fresh_search将时间为1的单元格添加到集合中,然后对所有相邻单元格再次调用fresh_search

接下来我们只看r-1,它是我们的原点,现在fresh_search被这个单元调用,时间为=2。现在这个值还不在集合中,因为(0,0,0) != (0,0,2),所以它将它添加到集合中,并用r+1单元再次调用fresh_search,但现在时间为3

依此类推,直到最大递归。

最新更新