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