【圖論】拓撲排序應用


拓撲排序雖是一種排序,但是它跟平時所接觸的sort或者qsort不同,排序的意義不同。拓撲排序針對有向無回路圖(DAG)而言的,不應用與存在回路的有向圖。

【圖論】廣度優先搜索和深度優先搜索 有說到了BFS和DFS,拓撲排序是DFS的一個應用。

有向無回路圖能說明事件的發生的先后的順序。比如穿衣服,士兵排隊等。一個具體的例子,有N個物體,下面給出物體的重量比較,比如(a,b)表示a比b重等等,問已給出的條件是否會矛盾?其實就是判斷用所給條件所組織的一個圖中是否會存在環?

在DFS中加入時間戳,完成DFS后讓節點按第二時間戳排序,就得到了DAG的拓撲排序結果。【圖論】有向圖是否存在環 拓撲排序還可以解決這個問題。

下面是士兵排隊,邊(u,v)表示士兵u必須排在士兵v的前面。

image

DFS過程增加時間戳,然后按照時間戳來排列頂點就可以得到士兵的排列,就可以得到:

image

所以g在f的前面,f在e的前面...

拓撲排序實現

得到偽代碼:

TOPLLOGICAL-SORT(G)
    DFS    /****帶時間戳****/
    /****按第二時間戳排序****/

拓撲排序判斷有無環

拓撲排序可以用於有向圖環的判斷。對於有向無回路圖來說,進行拓撲排序之后(將上面第二個圖,可以參考一下),對於(left,right),left指起點在左,right指終點在右,都有第二時間戳(right)<第二時間戳(left),也就是說如果違反這個結果,圖中是比存在環的。看看:

image

對於邊(d,a)第二時間戳(a)>第二時間戳(d),此圖存在環。利用拓撲排序還可以實現單源最短路徑算法。

題外話:

我的算法還是比較水,硬着頭皮去參加藍橋杯的決賽,盡力啦!盡量不要讓結果是打醬油的。藍橋杯的比賽跟ACM/ICPC都很難,但是業內應該是ACM/ICPC更有威望的。也罷,去看看北京也好。

我們班就W和Z再加上我三個人,W很牛掰,較量起來根本不是對手,以后要好好向他學習!

真正讓我學習算法的時間比較晚,因為一開始對其他的技術比較興趣,也算是亡羊補牢,希望能有所收獲吧。

本文完 2012-05-22

搗亂小子 http://www.daoluan.net


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM