什么是拓扑排序

在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:

  1. 每个顶点出现且只出现一次。
  2. 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。

为什么要拓扑排序,假如我们有几个先修课程,有一些没有先修,有些课程之间有先后的关系,有些课程则可以并行的进行,那么我们使用拓扑排序可以得到我们需要修顺序

有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。

我们需要如何从一个有向图得到拓扑排序,其实简单,我们只需要循环寻找图中,任意一个没有入度的点,然后把它放到我们拓扑排序中的队列中,然后从图中删除这个点。继续循环寻找。循环直到图为空或找不到入度为0的点,第二种为图有环

另一方法是使用入栈DFS,深度优先搜索的出栈顺序