DFS 最终进入无限循环

DFS ends up into an infinite loop

提问人:Dominic 提问时间:10/25/2023 最后编辑:WyckDominic 更新时间:10/25/2023 访问量:42

问:

我写了一个 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