考虑下面的图表
假设程序在时间t = 0开始执行并且最初发现了节点A.在时间t = 0,没有发现其他节点。在时间t = 4时,程序已发现上图中的所有节点并返回其起始状态,从而完成一个循环。
我的问题如下:
答案 0 :(得分:0)
您所描述的方法几乎是DFS - 选择一个分支 - 并尽可能多地开发它。
另一种常见的图发现算法是BFS - “发现”距离源距离0的所有节点,然后距离1,......直到发现所有图形。
请注意,DFS的变体,包含动态“访问”集(并允许重新发现已发现但未在当前分支中的节点)可用于循环检测(假设您需要所有循环),但可能需要很长时间才能运行 - 因为图中可能存在指数级的循环
答案 1 :(得分:0)
我不想给你解决方案,你应该试试自己,
但是这里有一些能让你顺利的东西:
我在这里使用Depth First Search 。
initially all nodes grey
for each node
mark it as white
dfs(grey child)
mark node black
dfs(node)
if(child node white)
CYCLE detected
else ...normal routine
如果你仍然无法理解,我会详细说明。