AOE網路和關鍵路徑

2021-08-25 19:46:38 字數 2572 閱讀 3966

#include

#define inf 99999999

using

namespace

std;

/* aoe:

在現代化管理中,人們常用有向圖來描述和分析一項工程的計畫和實施過程,乙個工程常被分為多個

小的子工程,這些子工程被稱為活動(activity),在帶權有向圖中若以頂點表示事件,有向邊表示

活動,邊上的權值表示該活動持續的時間,這樣的圖簡稱為aoe(activity on edge network)網。

在這裡邊權值代表某個小組進行的時間,也就是說小組是用邊來表示。結點表示某任務的開始情況。

關鍵路徑:

從起點到終點的邊權之和最大的路徑。這個路徑可能有多條,其實我們需要的是關鍵路徑的邊權之和。

至於哪些結點是關鍵結點,在下面問題的求解上可以求出來。

機動路徑:

在aoe網路中,若某結點工作,則它的所有前驅結點都必須被完成。也就是說它的開始時間決定於從起點到達它的路

徑中最長的那條的時間,這個時間被稱作最早開始時間(earliest)。反過來,從終點向後退,如果到達結點有多條

路徑,取最小的開始時間,這個時間被稱作最晚開始時間(latest)。latest - earlist大於0的結點是機動結點。

又由於它所有的前驅結點都必須被完成,所以前進路徑是一定是拓撲排序路徑,後退路徑一定是逆拓撲排序路徑。

函式說明:

mgraphrecord()和lgraphrecord()這個函式只能求出來某種情況下的機動路徑和關鍵路徑,不能求出來可能的機動路徑。

比如有三個結點:a, b, c。有以下兩種路徑: 1)a ---40---> c 2)a ---10---> b ---20---> c。

這時候10若為機動路徑,且機動時間為10,20則是關鍵路徑。20若為機動路徑,且機動時間為10,a則是關鍵路徑。

當然還可以有其他組合。這時10、20都是可能為機動路徑,但是在某種求解演算法下,10、20是否為機動路徑是一定的。

*/typedef

class help

} *record;

class mgraph //矩陣圖

};class node //鏈式圖

};class lgraph

};mgraph* create_mgraph()

for(i = 0; i < en; i++)

return g;

}lgraph *create_lgraph()

return g;

}record mgraphrecord(mgraph *g)

}for(i = 0; i < n; i++) //有相同earliest的補上邊權 0

for(j = 0; j < n && i != j; j++)

if(record[i].earliest == record[j].earliest)

g->matrix[i][j] = 0;

if(cnt != n)

for(i = 0; i < n; i++)

record[i].latest = record[n - 1].earliest;

while(cnt) //o(v方)

return record;

}record lgraphrecord(lgraph *g)}}

if(cnt != n)

for(i = 0; i < n; i++)

for(j = 0; j < n && i != j; j++)

if(record[i].earliest == record[j].earliest)

g->vs[i].push_back(*(new node(j, 0)));

for(i = 0; i < n; i++)

record[i].latest = record[n - 1].earliest;

while(cnt) //o(v*e)

return record;

}void printflexibleedgem(mgraph *g, record record)

void printflexibleedgel(lgraph *g, record record)

int main()

/* input:

9 11

0 1 6

0 2 4

0 3 5

1 4 1

2 4 1

3 5 2

5 7 4

4 6 9

4 7 7

7 8 4

6 8 2

9 11

0 1 6

0 2 4

0 3 5

1 4 1

2 4 1

3 5 2

5 7 4

4 6 9

4 7 7

7 8 4

6 8 2

output:

0 3 1 2 4

0 3 1 2 4

*/

AOE網路的關鍵路徑問題

關於aoe網路的基本概念可以參考 資料結構 或者search一下就能找到,這裡不做贅述。尋找aoe網路的關鍵路徑目的是 發現該活動網路中能夠縮短工程時長的活動,縮短這些活動的時長,就可以縮短整個工程的時長。因此,尋找關鍵路徑就是尋找關鍵活動。接下來開始尋找乙個工程中的關鍵路徑 關鍵活動 尋找關鍵路徑...

AOE網 關鍵路徑和關鍵活動

全域性棧 seqstacksq2 typedef struct edgenode edgenode typedef struct vertexnode vertexnode,adjlist maxvex typedef struct graphadjlist,graphadjlist 構建節點 ed...

AOE網 關鍵路徑

aov網中 無環有向圖中,頂點表示活動 邊表示先後順序。aoe網中 帶權有向圖中,頂點表示事件,有向邊表示活動,邊上的權值表示活動的持續時間。我們成為aoe網 activity on edge network aoe網中沒有入邊的頂點表示源點或始點,沒有出邊的叫終點或匯點。aoe網要建立在活動之間制...