AOV網
以頂點表示活動,以有向邊表示活動之間的優先關系的有向圖稱為頂點表示活動的 網(Activity On Vertex Network),簡稱AOV網。
前驅、后繼
在AOV網中,若頂點i 到頂點j之間有路徑,則稱頂 點i為頂點j的前驅,頂點j為 頂點i的后繼;
若頂點i到頂 點j之間為一條有向邊,則 稱頂點i為頂點j的直接前驅, 頂點j為頂點i的直接后繼。
拓撲排序
檢測工程能否正常進行, 首先要判斷對應的AOV網中是否存在回路,達到該目的最有效的方法之一是對AOV網構造其頂點的拓撲序列, 即對AOV網進行 拓撲排序。
設G=(V,E)是一個具有n個頂點的有向圖,V中的頂點序列v1,v2,…,vn,滿足若從頂點vi到vj有一條路徑,則在頂點序列中頂點vi必在頂點vj之前,則稱這樣的頂點序列為一個拓撲序列。構造拓撲序列的過程就是拓撲排序。離散數學中,由某個集合上的一個偏序得到該集合上的一個全序的操作稱為拓撲排序。
構造AOV網的一個頂點序列,使得該頂 點序列滿足下列條件:
1. 若在AOV網中,頂點i 優先於頂點j,則 在該序列中頂點i 仍然優先於頂點j;
2. 若在AOV網中,頂點i與頂點j之間不存在優先關系,則在該序列中建立它們的優先 關系,即頂點i優先於頂點j,或者頂點j 優先於 頂點i;
3. 若能構造出這樣的拓撲序列,則拓撲序列包含AOV網的全部頂點,說明AOV網中沒有回路。
拓撲排序的方法:
1. 從AOV網中任意選擇一個沒有前驅的頂點(入度為0);
2. 從AOV網中去掉該頂點以及以該頂點為出發點的所有邊;
3. 重復上述過程,直到AOV網中的所有頂點都被去掉,或者AOV網中還有頂點,但不存在入度為0 的頂點。前者說明AOV網中無回路, 后者說明AOV網中存在回路。
拓撲序列不一定唯一,若不存在拓撲序列,則網中有回路
自然語言描述的算法
鄰接表存儲
1. 首先建立一個入度為0的頂點棧,將網中所 有入度為0的頂點分別進棧。
2. 當堆棧不空時,反復執行以下動作: 從頂點棧中退出一個頂點,並輸出它; 從AOV網中刪去該頂點以及以它發出的所有 邊,並分別將這些邊的終點的入度減1;若此時邊的終點的入度為0,則將該終點進棧;
3. 若輸出的頂點個數少於AOV網中的頂點個數, 則報告網中存在回路,否則,說明該網中不存在回路。
深度優先遍歷
若從某個頂 點v出發,遍歷結束前出現了從頂點 u到頂點v的回邊,則可以斷定圖中包 含頂點v到頂點u的回路。