資料結構 拓撲排序

2021-10-12 11:12:28 字數 1718 閱讀 7005

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

給出有向圖g - ( v , e ), 對於v中頂點的線性序列**(v1,v2,…,vk)**,如果滿足如下條件: 若在g中從頂點vivj有一條路徑,則在序列中頂點vi必須在頂點vj之前,稱該序列為g的乙個拓撲序列.構造有向圖的拓撲序列的過程稱為拓撲排序.

再aov 網中,若不存在迴路.則所有活動可排成乙個線性序列,使得每個活動的所有前驅活動都排在該活動的前面,那麼該序列為拓撲序列.

拓撲序列不是唯一的.

對aov圖不一定都有拓撲序列.

從前驅和後繼的傳遞性和反自反性來看,aov 網中不能出現有向迴路(或稱有向環).再aov網中如果出現了有向環,則意味著某項活動應以自己作為先決條件,這不是對的,工程將無法進行.對程式流程而言,將出現死迴圈.因此,對給定的aov網,應先判斷它是否存在有向環.判斷aov網是否存在有向環的方法是對該aov網進行拓撲排序,將aov網中的頂點排列成乙個線性有序序列,若該線性序列,若該線性序列中包含aov 網全部的頂點,則aov 網中無環,否則,aov網中存在有向環,該網所代表的工程是不可行的.

如果按照拓撲序列中的頂點次序進行每一項活動,就能夠保證在每一項活動時,他的所有前驅活動均已完成,從而使整個工程順序執行.

在aov網中選乙個入度為0的頂點 ( 即沒有前驅 ) 且輸出之.

從aov網中刪除此頂點以及從該頂點發出來的所有有向邊;

重複1 , 2兩步,知道aov網中所有的頂點都被輸出或網中不存在入度為 0 的頂點.

從拓撲排序步驟可知,若在第三步中,網中所有頂點都被輸出,則表明網中無有向環,拓撲排序成功,若按照拓撲排序的順序開展活動則此工程能順利完成;若僅輸出部分頂點,網中已不存在入度為 0 的頂點,則表明網中有有向環,拓撲排序不成功,則此工程不能順利完成.

**頭結點結構體定義為 : **

typedef

struct vexnodevexnode vexlist[maxvernum]

;

頭結點示意圖

innum

vexfirstarc

此外,我們還需要乙個棧來儲存拓撲排序過程中入度為 0 的頂點.

void

topologicalorder

(algraph g)}if

(count==g.vexnum)

printf

("拓撲排序失敗,網中存在迴路 .");

else

printf

("拓撲排序成功,網中不存在迴路 . ");

}

資料結構 拓撲排序

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

資料結構 拓撲排序

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

資料結構之拓撲排序

乙個簡單的求拓撲排序思路是 先找出任意乙個沒有入邊的頂點。然後列印出該頂點,並將它和它的邊一起從圖中刪除。然後,我們對圖的其餘部分採用同樣的方法處理。相應的我們可以定義乙個indegree 入度陣列 儲存所有頂點的入度。具體實現如下 鄰接表 define crt secure no warnings...