我试图编写代码以检测有向图中的循环,如果没有循环,则返回相同的拓扑顺序。
在搜索时,我遇到了DFS,拓扑排序等不同技术,以检测有向图中的循环。
DFS和拓扑排序分别提到。两者之间有什么区别吗?
答案 0 :(得分:2)
好,拓扑排序是有向无环图的节点can be achieved by depth-first search的特定顺序。除了深度优先搜索之外,还有其他方法可以找到拓扑顺序,例如Kahn's algorighm。
答案 1 :(得分:2)
拓扑排序是有向无环图(DAG)上基于DFS的算法。拓扑排序是顶点的线性排序,因此对于每个有向边uv,在排序中,顶点u在v之前。
当且仅当该图没有定向循环时,才可能进行拓扑排序。但是DFS可以在有向图或无向图上执行。
答案 2 :(得分:1)
拓扑排序以下列方式使用DFS:
运行时:O(V + E)
从本质上讲,拓扑排序算法在DAG上使用DFS。 DFS属性对于返回的列表以正确的拓扑顺序显示至关重要。但是,如上面的答案所示,如果不使用DFS,则无法实现是的排序。例如Kahn's algorithm和并行排序。
答案 3 :(得分:0)
如果您想弄清楚一个主意,可以尝试以下问题。
起初,您可能会跳入直接进行DFS的过程,但在某些情况下会失败。
例如:DFS在以下测试案例中失败:
5 4(分别为顶点和边数)
(边缘说明)
1 2
2 3
1 4
4 3