拓撲排序及其應用
1.拓撲排序的介紹
對於乙個有向無環圖g=(v,e)來說,其拓撲排序是g中所有結點的一種線性次序。該次序滿足如下條件:如果圖g包含邊(u,v),則結點u在拓撲排序中處於結點v的前面(如果圖g包含環路,則不可能排出乙個線性次序。)可以將圖的拓撲排序看作是將圖的所有結點在一條水平線上排開,圖的所有有向邊都從左指向右。
2.拓撲排序與深搜的結合。
poj1270:
題目大意:列出有序序列(following orders)
給定一行小寫字母以及這些小寫字母之間的一些關係。按字典序列出所有的滿足約束條件的有序序列。
大體思路:深搜+剪枝。按照約束條件構造圖。在深搜求出全排列的過程中,結合拓撲排序進行剪枝。
3.拓撲排序與廣搜的區別
相同點:拓撲排序實質上就是一種廣搜。在演算法的執行過程中,通過棧頂頂點訪問它的每個鄰接點,整個演算法的執行過程中,每個頂點訪問一次且僅一次,每條邊掃瞄一次且僅一次。
不同點:廣搜在掃瞄每條邊時,如果邊的終點沒有訪問過,則入佇列;而拓撲排序演算法在掃瞄每條邊時,終點入度要減1,當減到0時才將該終點入棧。
注意點:拓撲排序演算法用棧或者佇列實現均可。但是廣搜必須棧來儲存待擴充套件的頂點。
poj1094,2585都是用佇列實現拓撲排序的基本題目。用拓撲排序證明是否存在環,給定的約束條件是否產生衝突以及能否產生乙個拓撲序列。
4.逆拓撲排序
poj3687:給球編號(labeling balls)
參考這篇博文:
拓撲排序簡介及其應用
拓撲排序是資料結構圖論中的一點內容。拓撲排序主要用來解決有向圖中的依賴解析 dependency resolution 問題。這裡主要寫幾個模板 題目鏈結 include include using namespace std const int m 505 int raod m m p m int...
拓撲排序的應用
adjlist.h有向無環圖的鄰接表儲存結構 include include include define max vertex num 10 define max name 10 typedef char vertexdata max name typedef struct arcnode arc...
python 拓撲排序 Python 拓撲排序
python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...