【发布时间】:2018-11-10 15:05:53
【问题描述】:
我正在关注 Tushar Roy 的 video 在有向图中检测循环。我了解使用白色、灰色和黑色集来检测循环,但我不明白的主要是当我们检查 white 集的长度时,next(iter(white)) 会知道下一步该去哪里因为设置的大小已经改变。文档说iter 为您提供了一个迭代器对象,next 将检索下一项。迭代器每次评估的重点是不同的吗?
def has_cycle(graph):
white = set()
gray = set()
black = set()
for vertex in graph.all_vertex.values():
white.add(vertex)
while len(white) > 0:
current = next(iter(white))
if dfs(current, white, gray, black) == True:
return True
return False
def dfs(current, white, gray, black):
move_vertex(current, white, gray)
for neighbor in current.adjacent_vertices:
if neighbor in black:
continue
if neighbor in gray:
return True
if dfs(neighbor, white, gray, black) == True:
return True
move_vertex(current, gray, black)
return False
def move_vertex(vertex, source_set, destination_set):
source_set.remove(vertex)
destination_set.add(vertex)
【问题讨论】:
-
[dfs] 不是正确的标签:"DFS 是微软的分布式文件系统。注意:关于深度优先搜索的问题,请使用深度优先搜索标签。*不要与 [depth-first-search]"* 混淆
-
@c0der,我做出了改变。谢谢。
标签: python iterator depth-first-search next