資料結構 拓撲排序演算法

2021-07-25 11:11:09 字數 1305 閱讀 3306

簡單地說,由某個集合上的乙個偏序得到該集合上的乙個全序,這個操作稱之為拓撲排序。

偏序:只有部分可以比較關係

全序:全部都能比較關係

aov網:用頂點表示活動,用弧表示活動間的優先關係的有向圖稱為頂點表示活動的網。

在aov網中,不應該出現有向環,因為存在環意味著某項活動應以自己為先決條件。

對給定的aov網判定網中是否有環?

拓撲序列使得aov網中所有應存在的前驅和後繼關係都能得到滿足。

對有向圖構造其頂點的拓撲有序序列,若網中所有頂點都在它的拓撲有序序列中,則該aov網中必定不存在環。

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

(2)從圖中刪除該頂點和所有以它為尾的弧。

重複上述兩步,直至全部頂點均已輸出,或者當前圖中不存在無前驅的頂點為止。後一種情況則說明有向圖中存在環。

採用正鄰接錶鏈作為aov網的儲存結構;

設立堆疊,用來暫存入度為0的點;

刪除頂點以它為尾的弧:弧頭頂點的入度減1。

設計資料結構1. 圖的儲存結構:採用鄰接表儲存,在頂點表中增加乙個入度域。

2. 棧s: 儲存所有無前驅的頂點。也可以用佇列

偽**:

1. 棧初始化;累加器count初始化;

2. 掃瞄頂點表,將沒有前驅的頂點壓棧;

3. 當棧s非空時迴圈:

3.1 vj=退出棧頂元素;輸出vj;累加器加1;

3.2 將頂點vj的各個鄰接點的入度減1;

3.3 將新的入度為0的頂點入棧;

4.if(count

演算法實現:統計各頂點入度的函式

void count_indegree(algraph *g)}}

拓撲排序演算法

int topologic_sort(algraph *g, int topol)

}} while(boolean==0);

if(count

vexnum) return -1;

else

return

1;}

資料結構 拓撲排序

設g v,e 是乙個具有n個頂點的有向圖,v中的頂點序列v0,v1,v2,vn 1如果滿足下列條件 若從vi到vj有一條路徑,則在頂點序列中頂點vi必定在vj之前,這樣的序列稱為拓撲序列。對乙個有向圖構造拓撲序列的過程稱為拓撲排序 topological sort 顯然,每乙個可以構造出不止乙個拓撲...

資料結構 拓撲排序

aov網路用有向圖的頂點表示活動,頂點之間的有向邊表示活動間的先後關係,這種有向圖稱為頂點表示活動網路,簡稱aov網路。當限制各個活動只能序列進行時,可以將aov網路中所有頂點排列成乙個線性序列,且vi必須在vj之前,我們就稱這個線性序列為拓撲序列,把對aov網構造拓撲序列的操作稱為拓撲排序。拓撲排...

資料結構 拓撲排序

拓撲排序是圖中重要的操作之一,在實際中應用很廣泛.再aov網中,不應該出現有向環路,因為有環意味著某項活動以自己作為先決條件,這樣就進入了死迴圈.因此,對給定的aov網應該首先判定網中是否存在環 檢測的辦法就是對有向圖進行拓撲排序,拓撲排序是指照有向圖給出的次序關係,將圖中頂點排成乙個線性序列,對於...