一、什么是拓撲排序
在圖論中,拓撲排序(Topological Sorting)是一個有向無環圖(DAG, Directed Acyclic Graph)的所有頂點的線性序列。且該序列必須滿足下面兩個條件:
每個頂點出現且只出現一次。
若存在一條從頂點 A 到頂點 B 的路徑,那么在序列中頂點 A 出現在頂點 B 的前面。
有向無環圖(DAG)才有拓撲排序,非DAG圖沒有拓撲排序一說。
例如,下面這個圖:
它是一個 DAG 圖,那么如何寫出它的拓撲排序呢?這里說一種比較常用的方法:
1、從 DAG 圖中選擇一個 沒有前驅(即入度為0)的頂點並輸出。
2、從圖中刪除該頂點和所有以它為起點的有向邊。
3、重復 1 和 2 直到當前的 DAG 圖為空或當前圖中不存在無前驅的頂點為止。后一種情況說明有向圖中必然存在環。
於是,得到拓撲排序后的結果是 { 1, 2, 4, 3, 5 }。
通常,一個有向無環圖可以有一個或多個拓撲排序序列。
拓撲序列是有向無環圖中所有頂點的一個線性序列,若有向圖中存在弧<v,w>或存在從頂點 v 到 w 的路徑,則在該有向圖的任一拓撲序列中,v 一定在 w 之前。下面有向圖的拓撲序列是A。
(57)A.41235 B.43125 C.42135 D.41325