提问人:Dominic 提问时间:10/25/2023 最后编辑:WyckDominic 更新时间:10/25/2023 访问量:42
DFS 最终进入无限循环
DFS ends up into an infinite loop
问:
我写了一个 dfs 搜索来寻找问题。我正在解决的问题是,当给定一个数字数组(例如 [2, 1, 3])时,我需要遍历数组并计算其自身及其相邻单元格(如果已填充)。例如,如果数组是 [2, 1, 3],答案将是 [1, 2, 3]。如果数组是 [1, 4, 2, 5],则答案将是 [1, 1, 2, 2]。
这是我所拥有的:
def solution(queries):
length = max(queries)+1
district = [0] * length
def dfs(spot, district):
if spot < 0 or spot >= len(district) or district[spot] == 0:
return 0
return 1 + dfs(spot-1, district) + dfs(spot+1, district)
res = []
for q in queries:
district[q] = 1
curr = dfs(q, district)
res.append(curr)
return res
不知何故,我的 dfs 函数最终进入了无限循环。有什么建议可以解决这个问题吗?
谢谢。
不知何故,我的 dfs 函数最终进入了无限循环。有什么建议可以解决这个问题吗?
答:
2赞
mandy8055
10/25/2023
#1
我可以看到访问的单元格没有标记,这将允许 DFS 算法一次又一次地访问同一个单元格,从而导致无限循环。您只需要在遍历单元格之前将该单元格标记为已访问即可。像这样:
def solution(queries):
length = max(queries)+1
district = [0] * length
def dfs(spot, district):
if spot < 0 or spot >= len(district) or district[spot] == 0:
return 0
district[spot] = 0 # <----- Here
return 1 + dfs(spot-1, district) + dfs(spot+1, district)
res = []
for q in queries:
district[q] = 1
curr = dfs(q, district)
res.append(curr)
return res
评论