AOV網拓撲排序 c c

2021-10-02 18:35:02 字數 1505 閱讀 5810

工程是否順序進行,流程是否合理,採用aov網來表示,頂點用來表示工程(活動),弧表示工程間的順序關係。如a有乙個指向b的弧,意味著a結束了b才能開始(a為弧尾,b為弧頭)

演算法思路:1,在有向圖中找到無前驅(入度為0)的結點v,輸出。2,刪除v及以v為弧尾的弧。3,重複1,2,輸出全部結點/或者網中沒有無前驅的點(沒有入度為0的點,即存在環)

拓撲排序採用鄰接表較方便實現,下面給出以鄰接表儲存圖的演算法:

void

toposort

(agraph& g)}if

(count != g.vexnum)

std::cout <<

"存在環!"

<<

'\n'

;}

完整示例

輸入為下面的有向圖,求它的拓撲排序:

//頂點數目

#define max 11

//邊的個數

//鄰接表

typedef

struct arcnode

arcnode;

//邊表結點

typedef

struct

adjlist;

//頂點

typedef

struct

agraph;

void

toposort

(agraph& g)

;//拓撲排序

intmain()

;//頂點資訊

int arcdata[max][2

]=,,

,,,,

,,,,

};//連線的邊

int i, j;

for(i =

0; i < g.vexnum;

++i)

}//鄰接表初始化完畢

cout <<

"拓撲排序: "

;toposort

(g);

cout << endl;

//釋放空間(類似析構函式)

arcnode* temp=

null

,* tt=

null

;for

(i =

0; i < g.vexnum; i++)}

}return0;

}void

toposort

(agraph& g)}if

(count != g.vexnum)

std::cout <<

"存在環!"

<<

'\n'

;}輸出結果為:

AOV網 拓撲排序

aov網路 拓撲排序 前面說了兩個有環的應用 有環 最小生成樹 普利姆演算法,克魯斯卡爾演算法 有環 最短路徑 迪傑斯特拉演算法,弗洛伊德演算法 現在我們說下沒環的圖 在乙個有向圖中,用頂點表示活動,用邊表示頂點活動之間的優先關係,這樣的網我們叫aov網 activity on vertex net...

AOV網 拓撲排序

aov網路 拓撲排序 前面說了兩個有環的應用 有環 最小生成樹 普利姆演算法,克魯斯卡爾演算法 有環 最短路徑 迪傑斯特拉演算法,弗洛伊德演算法 現在我們說下沒環的圖 在乙個有向圖中,用頂點表示活動,用邊表示頂點活動之間的優先關係,這樣的網我們叫aov網 activity on vertex net...

設計AOV網拓撲排序的演算法

對乙個有向圖構造拓撲序列的過程稱為拓撲排序 不唯一 1 圖的儲存結構 採用鄰接表儲存,在頂點增加乙個入度域 2 棧s儲存所有無前驅的頂點 1.棧s初始化 累加器count初始化 2.掃瞄頂點表,將沒有前驅 入度為0 的頂點壓棧 3.當棧s非空時迴圈 3.1 j 棧頂元素出棧 輸出頂點j count ...