查找图表中的循环数

时间:2015-09-21 09:31:50

标签: algorithm data-structures graph

我必须在图表中找到周期数。

我知道Tarjan的强连接组件算法,但我有点混乱。

我可以使用DFS或BFS查找周期数。为什么不。如果IT是树,答案会改变

我在询问每个节点是否只有一个传出边缘可以使用dfs。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用DFS查找图中的循环。图中存在不同类型的边,包括后边,后边定义为将顶点连接回图中的先前祖先之一的边。这些是找到在DFS中已经发现但尚未完成的顶点的边。根据定义,后边缘表示一个循环,因此我们可以使用此定义对图中的循环进行计数。

执行此操作的简单算法包括运行DFS并跟踪递归堆栈中发现的顶点。因此,只要DFS发现新顶点,就将其标记为“已发现”并放置到堆栈中。一旦“完成”所有顶点的子代并且DFS已退回到该顶点,它将在“完成”后立即从堆栈中删除。如果稍后在DFS中发现了尚未完成并因此位于该堆栈上的已发现顶点,我们就会知道存在一个后沿,从而形成一个周期,并且可以将计数器增加1或记下它,无论您选择什么。

对于您的问题是否会随树而变-根据定义,树是没有循环的数据结构。因此,我们不必担心在树中寻找循环。

我希望这会有所帮助!