为什么使用DFS在无向图中查找周期和拓扑排序以在有向图中查找周期?

时间:2013-05-27 19:51:06

标签: algorithm graph depth-first-search topological-sort

对于无向图,如果我们需要找到一个周期,我们使用in this older question描述的深度优先搜索,这是一种众所周知的方法,也是最优的。

但对于有向图,this other question建议使用拓扑排序。

我的问题是,为什么我们不能使用我们用于无向图的相同技术来检查有向图中的周期?我已经想过各种情况,算法似乎总是同意。

任何人都可以提出一些示例有向图,其中DFS无法找到循环,但拓扑排序会发生吗?

1 个答案:

答案 0 :(得分:9)

您的问题似乎如下:您可以使用深度优先搜索来检测无向图中的周期,还是应该使用拓扑排序?

答案是这两种方法都有效。如果有向图中存在循环,则可以通过在图上运行深度优先搜索来检测此循环。一旦从循环中的节点开始搜索,就可以保证最终发现循环。

事实证明,拓扑排序和DFS以下列方式密切相关:如果您在图表中运行DFS并且找到一个循环,那么您标记的顺序相反完全探索的每个节点将给出拓扑图的图形。换句话说,“使用拓扑排序”的解决方案和“使用DFS”的解决方案可以被认为是非常相似的算法,因为实现拓扑排序的一种方法是使用DFS。

希望这有帮助!