dfs和拓扑排序之间有区别吗?是否可以在不使用dfs的情况下实现拓扑排序?

时间:2019-10-15 06:31:31

标签: algorithm graph dfs topological-sort

我试图编写代码以检测有向图中的循环,如果没有循环,则返回相同的拓扑顺序。

在搜索时,我遇到了DFS,拓扑排序等不同技术,以检测有向图中的循环。

DFS和拓扑排序分别提到。两者之间有什么区别吗?

4 个答案:

答案 0 :(得分:2)

好,拓扑排序是有向无环图的节点can be achieved by depth-first search的特定顺序。除了深度优先搜索之外,还有其他方法可以找到拓扑顺序,例如Kahn's algorighm

答案 1 :(得分:2)

拓扑排序是有向无环图(DAG)上基于DFS的算法。拓扑排序是顶点的线性排序,因此对于每个有向边uv,在排序中,顶点u在v之前。

当且仅当该图没有定向循环时,才可能进行拓扑排序。但是DFS可以在有向图或无向图上执行。

答案 2 :(得分:1)

拓扑排序以下列方式使用DFS:

  1. 致电DFS
  2. 注意在探索完所有边缘后(即精加工 次)
  3. 顶点完成后,在头部插入一个标识符 拓扑排序L
  4. 完成列表L是一种拓扑排序

运行时:O(V + E)

从本质上讲,拓扑排序算法在DAG上使用DFS。 DFS属性对于返回的列表以正确的拓扑顺序显示至关重要。但是,如上面的答案所示,如果不使用DFS,则无法实现的排序。例如Kahn's algorithm和并行排序。

答案 3 :(得分:0)

如果您想弄清楚一个主意,可以尝试以下问题。

https://onlinejudge.org/index.php?option=onlinejudge&Itemid=8&page=show_problem&category=0&problem=1246&mosmsg=Submission+received+with+ID+25820106

起初,您可能会跳入直接进行DFS的过程,但在某些情况下会失败。

例如:DFS在以下测试案例中失败:

5 4(分别为顶点和边数)

(边缘说明)

1 2

2 3

1 4

4 3

相关问题