我试图编写代码来检测有向图中的循环,如果没有循环,则返回相同图的拓扑排序。
在搜索时,我发现了不同的技术,如深度优先搜索和拓扑排序,用于检测有向图中的循环。
这两者之间有什么区别吗?
我试图编写代码来检测有向图中的循环,如果没有循环,则返回相同图的拓扑排序。
在搜索时,我发现了不同的技术,如深度优先搜索和拓扑排序,用于检测有向图中的循环。
这两者之间有什么区别吗?
拓扑排序是基于深度优先搜索算法的,适用于有向无环图(DAG)。拓扑排序是对顶点的线性排序,使得每条有向边uv中,顶点u在排序中出现在v之前。
只有当图中没有有向环时,才能进行拓扑排序。但DFS算法可应用于有向或无向图。
运行时间:O(V+E)
由于拓扑排序算法本质上是在DAG上使用DFS,因此DFS属性对于返回的列表以正确的拓扑顺序出现至关重要。然而,正如上面的答案所示,如果不使用DFS,则无法实现有序排列。例如,Kahn's algorithm和并行排序。起初,你可能会尝试直接使用深度优先搜索(DFS),但在某些情况下它会失败。
例如:DFS 在以下测试用例中失败:
5 4(顶点和边的数量)
(边的描述)
1 2
2 3
1 4
4 3