7 11 關鍵活動(二)

2021-07-28 02:07:30 字數 602 閱讀 5594

7-11 關鍵活動

鑑於我開始的做法不太好,dfs遍歷了起點和終點間的全部路徑,雖然是可以找到關鍵路徑的,但是還要去重之後才能得到結果。

於是嘗試經典的關鍵路徑演算法: 

1、通過拓撲排序計算出每個節點的最早開始時間,以及乙個拓撲序列s

2、反向遍歷拓撲序列s計算出最晚開始時間

3、節點的最早開始時間 == 最晚開始時間, 說明這節點就是瓶頸了,也就是關鍵節點

計算最晚開始時間有一種替代方法,不需要儲存步驟一中的拓撲序列s。

構造原圖的反向鄰接表, 將每條邊反向。

從終點出發,根據反向的鄰接表,拓撲排序一次。

獲得了關鍵節點和拓撲序列s之後,如何計算全部關鍵路徑?

可以dfs,但是從x節點, 在關鍵節點中找下乙個 y節點的時候, 需要判斷 earliest[x] + length[x, y]  == earliest[y]

如下面的有向圖, 關鍵節點是   1 2 3 4 5, 但是關鍵路徑是1 3 4 2 5

節點a        節點b       邊長12

22550013

2343

4274

51

7 11 關鍵活動

n 和 m,其中 n是任務交接點 即銜接相互依賴的兩個子任務的節點,例如 若任務2要在任務1完成後才開始,則兩任務之間必有乙個交接點 的數量。交接點按1 n編號,m是子任務的數量,依次編號為1 m。隨後 m行,每行給出了3個正整數,分別是該任務開始和完成涉及的交接點編號以及該任務所需的時間,整數間用...

7 11 關鍵活動 (30 分)

假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...

7 11 關鍵活動 30分

假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...