我是Python新手,决定练习算法以获得坚实的基础。我很难理解实现DFS的代码中的这一特定行:stack.extend(graph[vertex] - visited)
。这是否意味着graph [vertex]包含图中存在的所有顶点,并且此行会删除最近访问过的顶点,并返回图中剩余的未访问顶点列表?请找到代码来源here under connected component。谢谢!
答案 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]
应该是集合的字典(而不是列表),以便减法在不引发错误的情况下起作用。