//題目大意:
//前提:有向無環圖: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之前。在乙個有向圖中找乙個拓撲序列的過程稱為拓撲排序。用頂點表示活動,用有向邊表示活動之間的優先關係的有向圖稱為頂...