資料結構 拓撲排序

2021-10-08 01:32:14 字數 1565 閱讀 4688

aov網路用有向圖的頂點表示活動,頂點之間的有向邊表示活動間的先後關係,這種有向圖稱為頂點表示活動網路,簡稱aov網路。

當限制各個活動只能序列進行時,可以將aov網路中所有頂點排列成乙個線性序列,且vi必須在vj之前,我們就稱這個線性序列為拓撲序列,把對aov網構造拓撲序列的操作稱為拓撲排序

拓撲排序演算法:

1、在網中選擇乙個入度為0的頂點並輸出

2、刪除該頂點和所有由它發出的邊

3、重複操作,直到沒有入度為0的頂點

許多情況下入度為0的頂點不止乙個,這樣就可以給出多種拓撲排序,且每種都可以保證先後順序。

鄰接矩陣中,入度由這個頂點對應列上1的個數決定,所以演算法框架為:

1、取1作為第乙個新序號

2、找乙個沒有得到新序號的全0矩陣,若沒有則停止尋找,如果所有列都得到了新序號,拓撲排序完成,否則說明有向圖中有環存在,無法形成拓撲排序。

3、把新序號賦給找到的列,並將該列對應的頂點輸出

4、將找到的列所對應的行置全0

5、新序號+1,重複執行2~5

#include

#include

#include

typedef

char vertextype;

typedef

int edgetype;

typedef

struct

mgraph;

void

createmgraph

(mgraph *g)

for(i=

0;ivexnumber;i++)}

for(k=

0;kvexnumber;k++)}

void

toposorta

(mgraph *g,

int n)

v=1;//新序號變數置1

for(k=

0;k(t==1)

//找到第j列為全0列}}

if(j!=n)

}else

break;}

}if(vprintf

("\n the network has a cycle\n");

}

typedef

char vertextype;

typedef

int edgetype;

typedef

struct edgenodeedgenode;

typedef

struct

vexnode;

vexnode ga[n]

;//頂點表

void

toposortb

(vexnode ga)

}while

(top!=-1

) p=p->next;

//找下一條邊 }}

if(mprintf

("\n the network has a cycle\n");

}

資料結構 拓撲排序

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

資料結構 拓撲排序

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

資料結構之拓撲排序

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