演算法摘記 拓撲排序

2021-06-25 17:45:20 字數 1283 閱讀 5970

在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序

每個頂點出現且只出現一次;

若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。

也可以定義為:拓撲排序是對有向無環圖的頂點的一種排序,它使得如果存在一條從頂點a到頂點b的路徑,

那麼在排序中b出現在a的後面[1]    

由aov網構造拓撲序列的拓撲排序演算法主要是迴圈執行以下兩步,直到不存在入度為0的頂點為止。

(1) 選擇乙個入度為0的頂點並輸出之;

(2) 從網中刪除此頂點及所有出邊。

下面以圖3-7(a)為例,來說明拓撲排序演算法的執行過程。

(1) 在(a)圖中v0和v1的入度都為0,不妨選擇v0並輸出之,接著刪去頂點v0及出邊<0,2>,得到的結果如(b)圖所示。

(2) 在(b)圖中只有乙個入度為0的頂點v1,輸出v1,接著刪去v1和它的三條出邊<1,2>,<1,3>和<1,4>,得到的結果如(c)圖所示。

(3) 在(c)圖中v2和v4的入度都為0,不妨選擇v2並輸出之,接著刪去v2及兩條出邊<2,3>和<2,5>,得到的結果如(d)圖所示。

(4) 在(d)圖上依次輸出頂點v3,v4和v5,並在每個頂點輸出後刪除該頂點及出邊,操作都很簡單,不再贅述。

上圖的鏈結表

迴圈結束後,若輸出的頂點數小於網中的頂點數,則輸出「有迴路」資訊,否則輸出的頂點序列就是一種拓撲序列。

一種拓撲排序演算法。該演算法是簡單而直觀的,實質上屬於廣度優先遍歷,因此稱為廣度優先拓撲排序演算法。該演算法包含下列幾個步驟:

[1] 從有向圖中找乙個沒有前趨的結點v,若v不存在,則表明不可進行拓撲排序(圖中有環路),結束(不完全成功);

[2] 將v輸出;

[3] 將v從圖中刪除,同時刪除關聯於v的所有的邊

[4] 若圖中全部結點均已輸出,則結束(成功),否則轉[1]繼續進行。

拓撲排序(鄰接陣)模板

int map[501][501];//鄰接陣

int innum[501]; //記錄頂點的入度

for(i=1;i<=n;i++)//遍歷n次每次找出乙個頂點

}break; }}

}

hdu 1285

拓撲排序演算法

對許多資料結構教材實在不滿意,至少我是看不懂 至於拓撲排序演算法,教材上那些偽 真真教人頭暈。只寫了幾個struct結構,我根本看不出這是鄰接表。如果給出乙個清晰明了的圖,一切不就簡單了?總之,關鍵就是建立乙個鄰接表。然後利用這個表進行拓撲排序。邊表結點宣告 typedef struct edgen...

拓撲排序演算法

對乙個 有向無環圖 directed acyclic graph簡稱dag g進行拓撲排序,是將g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和v,乙個有向無環圖的拓撲序列不是唯一的 進行拓撲排序的演算法並不複雜 1 在有向圖中選乙個沒有前驅 入度為0 的頂點且輸出之 2 從圖中刪除該頂點及它...

演算法 拓撲排序

定義 應用 有向圖來表示,圖中的頂點代表活動 子工程 圖中的有向邊代表活動的先後關係,即有向邊的起點的活動是終點活動的前序活動,只有當起點活動完成之後,其終點活動才能進行。通常,我們把這種頂點表示活動 邊表示活動間先後關係的有向圖稱做頂點活動網 activity on vertex network ...