Python(DFS):请向我解释清楚:stack.extend(graph [vertex] - visited)

时间:2018-02-07 00:37:27

标签: python algorithm graph

我是Python新手,决定练习算法以获得坚实的基础。我很难理解实现DFS的代码中的这一特定行:stack.extend(graph[vertex] - visited)。这是否意味着graph [vertex]包含图中存在的所有顶点,并且此行会删除最近访问过的顶点,并返回图中剩余的未访问顶点列表?请找到代码来源here under connected component。谢谢!

1 个答案:

答案 0 :(得分:1)

我将在您的链接中粘贴代码以供所有人查看:

def dfs(graph, start):
    visited, stack = set(), [start]
    while stack:
        vertex = stack.pop()
        if vertex not in visited:
            visited.add(vertex)
            stack.extend(graph[vertex] - visited)
    return visited

此代码中发生了什么

在给定顶点为start的情况下,我们将添加由graph[vertex]表示的所有相邻顶点,以检查是否已经移动到该顶点。如果不是,我们需要将该顶点添加到名为visited的集合中,并用其所有相邻顶点扩展stack。接下来,我们从现在扩展的stack中弹出一个元素,并执行相同的检查过程,直到没有更多元素为止。

答案:

我怀疑- visited的{​​{1}}部分可能会让您失望。在此,stack.extend(graph[vertex] - visited)不会影响代码的功能,但有助于优化代码。这只是为了防止再次检查我们已经访问过的顶点,从而从- visited中减去visited。最后,我注意到graph[vertex]应该是集合的字典(而不是列表),以便减法在不引发错误的情况下起作用。