图发现和循环检测

时间:2014-02-16 12:00:39

标签: algorithm graph cycle graph-algorithm

考虑下面的图表

Graph Structure

假设程序在时间t = 0开始执行并且最初发现了节点A.在时间t = 0,没有发现其他节点。在时间t = 4时,程序已发现上图中的所有节点并返回其起始状态,从而完成一个循环。

我的问题如下:

  • 假设没有关于图表的先验信息,对于具有大量节点(n> 1000)和许多周期(不一定像上面那样简单和直接)的图表来说,这是最好的方法。 )我不想在发现整个图表后检测周期。

2 个答案:

答案 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 

如果你仍然无法理解,我会详细说明。