我必须在图表中找到周期数。
我知道Tarjan的强连接组件算法,但我有点混乱。
我可以使用DFS或BFS查找周期数。为什么不。如果IT是树,答案会改变
我在询问每个节点是否只有一个传出边缘可以使用dfs。
答案 0 :(得分:0)
是的,您可以使用DFS查找图中的循环。图中存在不同类型的边,包括后边,后边定义为将顶点连接回图中的先前祖先之一的边。这些是找到在DFS中已经发现但尚未完成的顶点的边。根据定义,后边缘表示一个循环,因此我们可以使用此定义对图中的循环进行计数。
执行此操作的简单算法包括运行DFS并跟踪递归堆栈中发现的顶点。因此,只要DFS发现新顶点,就将其标记为“已发现”并放置到堆栈中。一旦“完成”所有顶点的子代并且DFS已退回到该顶点,它将在“完成”后立即从堆栈中删除。如果稍后在DFS中发现了尚未完成并因此位于该堆栈上的已发现顶点,我们就会知道存在一个后沿,从而形成一个周期,并且可以将计数器增加1或记下它,无论您选择什么。>
对于您的问题是否会随树而变-根据定义,树是没有循环的数据结构。因此,我们不必担心在树中寻找循环。
我希望这会有所帮助!