AOE网(求关键路径)(c/c++)
??????工程中想要知道完成工程至少需要多少時間以及影響工程進度的關鍵子工程,通過AOE網來解決。其中邊表示活動,頂點表示事件。
??????如下圖:
??????其中入度為0的點v0稱為源點,出度為0的點v5稱為匯點。當v1事件發生時,a0活動已經結束,當v0事件發生時,a0活動可以開始。
事件:
??????任何一個頂點事件,都存在最早開始時間與不影響整個工期的最晚開始時間,最早開始時間用ve[i]來表示,最晚開始時間用vl[i]來表示。(early 和 late)
??????最早開始時間:方向為從源點-> 匯點
??????源點的最早開始時間為0,即ve[0]=0。其余頂點的最早開始時間ve[j]=max{ve[i]+arc[i][j]},即 j 頂點的最早開始時間為:任一頂點 i 的 ve[i] 加上從 i 到 j 的權值,取其中的最大值。
??????最晚開始時間:方向為從匯點-> 源點
??????匯點的最晚開始時間等于其最早開始時間,vl[5]=ve[5]。其余頂點的最晚開始時間vl[i]=min{vl[j]-arc[i][j]},即 i 頂點的最晚開始時間為:任一頂點 j 的 vl[j] 減去從 i 到 j 的權值,取其中的最小值。
??????上圖頂點時間的開始時間如下表:
| ve | 0 | 3 | 2 | 6 | 6 | 8 |
| vl | 0 | 4 | 2 | 6 | 7 | 8 |
??????其中ve等于vl的頂點稱為關鍵頂點,由它們組成路徑稱為關鍵路徑,上圖的關鍵路徑為v0-v2-v3-v5。完成該工程至少需要的時間為8,影響工程進度的關鍵子工程為關鍵路徑。
活動:
??????類似的,活動的最早開始時間為e[k],最晚開始時間為l[k]。計算方法為:
??????活動的最早開始時間為弧尾所指向事件的最早開始時間
??????最晚開始時間為弧頭所指向事件的最晚開始時間減去活動所需花費的時間
如下表:
| e | 0 | 0 | 3 | 3 | 2 | 2 | 6 | 6 |
| l | 1 | 0 | 4 | 4 | 2 | 5 | 6 | 7 |
??????選取最早開始時間等于最晚開始時間的活動,它們所連接的路徑為關鍵路徑,該圖的關鍵路徑為:a1-a4-a6。它與通過事件所計算出的關鍵路徑等效。
總結
以上是生活随笔為你收集整理的AOE网(求关键路径)(c/c++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AOV网拓扑排序(c/c++)
- 下一篇: 最短路径(Dijkstra算法)(c/c