dfs和拓扑排序有区别吗?不使用dfs能实现拓扑排序吗?

Is there a difference between dfs and topological sort? Can topological ordering be achieved without using dfs?

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

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

这两者有什么区别吗?

嗯,拓扑排序是有向无环图的节点的特定顺序,can be achieved by depth-first search. Besides depth-first search, there are other methods to find the topological order, like the Kahn's algorighm

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

当且仅当图没有有向环时,拓扑排序是可能的。但是DFS可以在有向图和无向图上进行。

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

  1. 调用 DFS
  2. 注意所有边都被探索过(即完成 次)
  3. 一个顶点完成后,在头部插入一个标识符 拓扑排序 L
  4. 完成的列表L是拓扑排序

运行-时间:O(V+E)

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

想要思路清晰,可以试试下面的问题

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