用兩種方式來實現
1、 深度優先搜索(DFS)
對有向圖采取深度優先搜索,并且在postVist處,打印所訪問的節點。最后打印出的字符序列的反序列正好滿足拓撲排序。(可以在postVist()方法中,將所訪問的元素壓到棧中,這樣最后從棧中一個個彈出來的元素的序列恰好就是拓撲排序的一個解)
這種方法證明是正確的,雖然感覺起來比較怪。
2. 根據節點入度排序
(1)選擇一個入度為0的節點N,并輸出它。(肯定會有入度為0的,就是起點)
(2)從圖中刪除N,并且刪掉從N出發的所有有向邊(即把與N相鄰的頂點的入度分別減1)
(3)重復(1)(2),直到剩余的頂點中沒有入度為0的頂點為止