求關鍵路徑 邊活動網(AOE)

2021-09-29 20:07:55 字數 1596 閱讀 9682

//題目大意:

//前提:有向無環圖:dag——》才有解。

// aoe網(邊活動網),點為事件,帶權的邊集為活動,權為完成活動所需要的時間。求計算完成總事件的最短時間。

//————即求最長路徑:此處最長即完成所有關鍵活動,即滿足了實現總事件的最短時間問題。

//思路:先求點,再求邊。

// 求最長路徑——》求所有關鍵活動(//判斷是否為關鍵活動:最遲開始時間==最早開始時間)(邊的時間累加)

//——》轉化為頂點的最早/最遲開始時間。——————先求點,再求出邊,判斷是否滿足即可

//實現過程:

//拓撲排序:使圖形線索化:便於找到前驅、後驅節點。

//整理時反思不足:

//1. 明確關鍵活動的定義與問題轉化過程

//——關鍵活動:活動的最早開始時間==最遲開始時間————————轉化為鄰近兩節點的最早/最遲開始時間。

//2. 拓撲排序的意義

//實現:g//鄰接表, indgree//入度記錄。

fill函式

#include

#define maxn

using

namespace std;

//實現拓撲排序

struct node

;vector g[maxn]

;stack<

int> toporder;

vector<

int> ve;

vector<

int> vl;

int n, indgree[maxn]

;bool

toporder_()

}while

(!p.

empty()

)//找出每個頂點的最早開始時間

if(ve[now]

+g[now]

[i]> ve[now])}

//g[now].clear(); //可不寫}if

(toporder.

size()

== n)

return

true

;else

return

false;}

intmain()

; g[from]

.push

(n1);}

memset

(ve,0,

sizeof

(ve));

if(toporder_()

==false

)return0;

fill

(vl, vl+n, ve[n-1]

);//vl陣列初始化,初始值為匯點的ve值。

while

(!toporder.

empty()

)}}//遍歷鄰接表所有的邊

for(

int u =

0; u < n; u++)}

} cout <<

"the shortest time of the whole project is "

<< ve[n-1]

<< endl;

return0;

}

AOE網求關鍵路徑(關鍵活動)

aoe網求關鍵路徑 關鍵活動 aoe網求解關鍵路徑,所需的是有向無環圖 利用拓撲排序,如果序列長度為頂點數,則是無環,小於頂點數則是有環圖,有環圖是不滿足求aoe網的 注意的是,只有乙個源點,有乙個匯頂點,然後關鍵路徑不一定只有一條。注意,這裡要理解 頂點 事件 邊 活動 還有四個陣列下面有介紹 這...

AOE網 關鍵路徑和關鍵活動

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

求AOE網中的所有關鍵活動

一 拓撲排序 設g 是乙個具有n個頂點的有向圖,v中的頂點序列v1,v2,v3,vn稱為乙個拓撲序列。若是圖中的一條邊或者從頂點vi到頂點vj有路徑,則在該序列中頂點vi必須排在頂點vj之前。在乙個有向圖中找乙個拓撲序列的過程稱為拓撲排序。用頂點表示活動,用有向邊表示活動之間的優先關係的有向圖稱為頂...