拓撲排序演算法

2021-06-22 18:40:53 字數 720 閱讀 5767

對乙個

有向無環圖

(directed acyclic graph簡稱dag)g進行拓撲排序,是將g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和v,

。乙個有向無環圖的拓撲序列不是唯一的:

進行拓撲排序的演算法並不複雜:

1)在有向圖中選乙個沒有前驅(入度為0)的頂點且輸出之

2)從圖中刪除該頂點及它發出的弧(這樣就得到了別的入度為0的頂點)。

重複上述2步,直到輸出全部頂點。

從描述上可以看出,我們需要記錄每個頂點的入度,實現如下:由於沒有記錄入度這一資訊,先要求出乙個入度陣列,來表示每個頂點的入度,這個入度陣列還要動態更新,當乙個頂點被刪除後,它指向的頂點的入度都要減1.

在鄰接表實現的有向圖中,拓撲序列生成過程如下:

public iterator topo(directedgraph g)

}for(int i = 0;i < g.size();i++) //要進行n次迴圈找出拓撲序列}}

return queue.iterator();

}

測試一下,構造下面的有向圖:

public static void main(string args) 

}

結果如下:

輸出拓撲序列:

v1  v3  v6  v2  v4  v5 

拓撲排序演算法

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

演算法 拓撲排序

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

拓撲排序演算法

拓撲排序的相關概念及思想參閱如下文章 資料結構圖之五 拓撲排序 brief header file private define maxvex 14 頂點數 define maxedge 20 邊數 typedef struct edgenode 邊表節點 edgenode typedef stru...