aoe網路:如果在有向無環圖中用有向邊表示乙個工程中的各項活動,用有向邊上的權值表示活動的持續時間,用頂點表示事件,則這種有向圖叫做用邊表示活動的網路,簡稱aoe網路。
aoe網路的用途
(1)完成整個工程至少需要多長時間
(2)為縮短工程所需的時間,應加快哪些活動
關鍵路徑:完成整個工程所需的時間取決於從源點到匯點的最長路徑長度,這條路徑最長的路徑就稱為關鍵路徑。(critical path);
常用的量:(1)事件ei的最早可能開始時間,記為ee[i].是從源點到頂點ei的最長路徑長度
(2)事件ei的最遲可能開始時間,記為el[i].el[i]是在保證匯點en-1在ee[n-1]時刻完成的前提下,事件ei允許開始的最遲時間,它等於ee[n-1]減去從ei到en-1的最長路徑長度。
(3)活動ak的最早可能開始時間,記為e[k]。設活動在有向邊上,e[k]=ee[i].
(4)活動ak最遲允許開始的時間,記為l[l]. l[k]=el[j]-dur的值。
求ee[i]的遞推公式,從ee[0]=0開始,向前遞推:
ee[i]=max.
求el[i]的遞推公式。從el[n-1]=ee[n-1]開始,反向遞推
el[i]=min.
這兩個遞推公式必須在拓撲有序及逆拓撲有序的前提下進行。所謂逆拓撲有序,就是首先輸出出度為0的頂點,以相反的次序輸出拓撲排序序列,這種排序稱為逆拓撲排序。
也就是說,在計算ee[i]時,ei的所有前驅頂點ej的ee[j]都已經求出。反之,在計算el[i]時,ei的所有後繼頂點el[j]都已經求出
例題:求如圖所示的aoe網路的關鍵路徑並輸出。首先輸入頂點個數n和邊個數m,然後依次輸入每條邊
#define maxn 100///頂點數目的最大值
#define maxm 200///邊的數目的最大值
struct arcnode
;int n,m;
arcnode *list1[maxn];///出邊表的表頭指標
arcnode *list2[maxn];///入邊表的表頭指標
int count1[maxn];///各頂點的入度
int count2[maxn];///各頂點的出度
int ee[maxn];///各事件最早可能開始的時間
int el[maxn];///各事件允許開始的最遲時間
int e[maxm];///各活動最早可能開始的時間
int l[maxm];///各活動允許最晚可以開始的時間
void criticalpath();
int main()
count2[u]++;
temp2=new arcnode;///構造逆鄰接表
temp2->to=u;
temp2->dur=w;
temp2->no=i+1;
temp2->next=null;
if(list2[v]==null)
list2[v]=temp2;
else
}criticalpath();
///釋放邊煉表上各邊結點所占用的空間
for(i=0;inext;
delete temp1;
temp1=list1[i];
}while(temp2!=null)}}
return 0;
}void criticalpath()
if(ee[j]+temp1->dur>ee[k])
ee[k]=ee[j]+temp1->dur;
temp1=temp1->next;}}
}///逆拓撲排序求el;
int top2=-1;
arcnode *temp2;
for(i=0;ito;
count2[k]--;
if(count2[k]==0)
if(el[j]-temp2->durdur;
temp2=temp2->next;}}
///輸出ee[i]和el[i]
for(i=0;ito;///有向邊;
k=temp1->no;
e[k]=ee[i];
l[k]=el[j]-temp1->dur;
if(e[k]==l[k])
temp1=temp1->next;}}
///輸出e[i]和l[i]的值
***書上的測試資料竟然給錯,還好有超哥相助,多謝超哥
活動網路 用邊表示活動的網路AOE
思考把工程計畫表示為有向圖,用頂點表示事件,弧表示活動 每個事件表示在它之前的活動已完成,在它之後的活動可以開始。例 設乙個工程有11項活動,9個事件事件。v1 表示整個工程開始事件,v9 表示整個工程結束。問題 1 完成整項工程至少需要多少時間?2 哪些活動是影響工程進度的關鍵?邊表示活動 act...
AOE網路和關鍵路徑
include define inf 99999999 using namespace std aoe 在現代化管理中,人們常用有向圖來描述和分析一項工程的計畫和實施過程,乙個工程常被分為多個 小的子工程,這些子工程被稱為活動 activity 在帶權有向圖中若以頂點表示事件,有向邊表示 活動,邊上...
AOE網路的關鍵路徑問題
關於aoe網路的基本概念可以參考 資料結構 或者search一下就能找到,這裡不做贅述。尋找aoe網路的關鍵路徑目的是 發現該活動網路中能夠縮短工程時長的活動,縮短這些活動的時長,就可以縮短整個工程的時長。因此,尋找關鍵路徑就是尋找關鍵活動。接下來開始尋找乙個工程中的關鍵路徑 關鍵活動 尋找關鍵路徑...