拓撲排序,關鍵路徑

2021-06-22 16:59:28 字數 1267 閱讀 8273

拓撲排序

對於乙個流程圖,可以用頂點表示活動,弧表示活動間的優先關係,這樣所表示的有向圖稱為頂點表示活動的網,即aov網。在網中,如果頂點i到頂點j有一條有向路徑,或者(i,j)是一條弧,則i是j的前驅,j是i的後繼。aov網中不應該出現環。

拓撲排序的思想很簡單,(1)在有向圖中選乙個沒有前驅的頂點輸出;(2)從途中刪除該頂點和所有以它為尾的弧。重複上述兩個步驟,直到全部頂點輸出,或者圖中不存在無前驅的頂點時,這說明圖有環。

有拓撲排序演算法可以看出,拓撲序列不唯一。

bool topologicalsort(algraph *g)

}if(count == g -> vexnum)

return true;

else

return false;

}

關鍵路徑

與aov網不同,用邊表示活動的網稱為aoe網。aoe網是乙個帶權的有向無環圖,用來估算工程完成的時間。由於整個工程只有乙個開始點和乙個完成點,所以網中只有乙個入度為0的點(源點)和乙個出度為0的點(匯點)。aoe網要研究的問題是完成整個工程最少需要多少時間,那些活動是影響工程的關鍵活動?

aoe網中的某些活動是可以並行的,所以完成工程的最短時間是從開始點到完成點的最長路徑的長度,成為關鍵路徑。用e(i)表示活動ai的最早開始時間,l(i)表示ai的最遲開始時間(在不影響整個工程的時間前提下),l(i)- e(i)表示活動ai的時間餘量,l(i)= e(i)的活動稱為關鍵活動,顯然關鍵路徑上的活動都是關鍵活動。演算法如下:

輸入e條弧,建立aoe網,可以用鄰接表。

從源點v0出發,另ve【0] = 0,按拓撲有序求其餘各頂點的最早發生時間ve[ i ],如果拓撲排序中序列頂點數小於網中頂點數,說明存在環。否則執行3

從匯點vn出發,另vl[n - 1] = ve[n - 1],按逆拓撲有序求各頂點最遲發生時間vl[ i ]。

根據ve和vl判斷,e( i ) = ve[ i ], l(i) = vl(k) - w(j,k),w表示弧權值,如果e(i) = l(i),說明(j,k)是關鍵活動。 v1

v2v3

v4v5

v6v7

v8v9ve0

6457

7161418vl0

6587

1016

1418

構成兩條關鍵路徑(v1, v2, v5, v7, v9)和(v1, v2, v5, v8, v9).

拓撲排序 關鍵路徑

功能function description hdoj 2094 開發環境environment dev c 4.9.9.1 技術特點technique 版本version 作者author 可笑痴狂 日期date 20120812 備註notes 策略問題 一 本來想先用字典樹給名字編號,然後用建...

關鍵路徑(拓撲排序)

一.先給出幾個概念 aoe 網 在帶權有向圖中頂點表示事物,有向邊表示活動,權表示活動持續的時間,則此有向圖稱為邊表示活動的網路。activity on edge network 表示實際工程的aoe 網應該是無環的,且存在唯一入度為0的起始頂點 始點 以及唯一出度為0的完成頂點 終點 利用aoe ...

拓撲排序和關鍵路徑

拓撲排序 乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱dag圖。所有的工程或者某種流程都可以分為若干個小的工程或者階段,稱這些小的工程或階段為 活動 這些子程式之間存在一定的約束,其中某種子工程的開始必須在另一些子工程完成之後。因此dag圖表示乙個工程,其中有向邊表...