設g=(v, e)是乙個具有n個頂點的有向圖,v中的頂點序列v0,v1,v2,…,vn-1如果滿足下列條件:若從vi到vj有一條路徑,則在頂點序列中頂點vi必定在vj之前,這樣的序列稱為拓撲序列。對乙個有向圖構造拓撲序列的過程稱為拓撲排序(topological sort)。
顯然,每乙個可以構造出不止乙個拓撲序列。
拓撲排序的步驟如下:1、在有向圖中選乙個沒有前驅的頂點並輸出;2、從圖中刪除該頂點和所有以它為尾的弧。
重複以上兩個步驟,直至全部頂點均已輸出,或者當前圖中不存在無前驅的頂點為止。後一種情況說明有向圖中存在環。
下圖說明拓撲排序的過程。假設存在多個結點沒有前驅,則任選乙個頂點均可。
首先求所有頂點的入度,然後在執行拓撲排序的過程中,當某個頂點的入度為零(即沒有前驅頂點)時,就將此頂點輸出,同時將該頂點的所有後繼頂點的入度減1,以達到刪除頂點和以它為尾的弧的操作。為了避免重複檢測入度為零的頂點,使用棧存放入度為零的頂點。
const
int maxvertexnum = 20;
struct dnenode ;
template
struct vnode ;
template
class dnalgraph
;template
void dnalgraph::findindegree(int indegree)
}}#include "stack"
template
bool dnalgraph::toposort()
}if (count < vexnum) else
}
資料結構 拓撲排序
aov網路用有向圖的頂點表示活動,頂點之間的有向邊表示活動間的先後關係,這種有向圖稱為頂點表示活動網路,簡稱aov網路。當限制各個活動只能序列進行時,可以將aov網路中所有頂點排列成乙個線性序列,且vi必須在vj之前,我們就稱這個線性序列為拓撲序列,把對aov網構造拓撲序列的操作稱為拓撲排序。拓撲排...
資料結構 拓撲排序
拓撲排序是圖中重要的操作之一,在實際中應用很廣泛.再aov網中,不應該出現有向環路,因為有環意味著某項活動以自己作為先決條件,這樣就進入了死迴圈.因此,對給定的aov網應該首先判定網中是否存在環 檢測的辦法就是對有向圖進行拓撲排序,拓撲排序是指照有向圖給出的次序關係,將圖中頂點排成乙個線性序列,對於...
資料結構之拓撲排序
乙個簡單的求拓撲排序思路是 先找出任意乙個沒有入邊的頂點。然後列印出該頂點,並將它和它的邊一起從圖中刪除。然後,我們對圖的其餘部分採用同樣的方法處理。相應的我們可以定義乙個indegree 入度陣列 儲存所有頂點的入度。具體實現如下 鄰接表 define crt secure no warnings...