AOE網上的關鍵路徑

2021-06-27 08:11:35 字數 1900 閱讀 8166

求關鍵路徑:

(1)輸入e條弧,建立aoe-網的儲存結構

(2)從源點v0出發,令ve[0]=0,按拓撲有序求其各頂點的最早發生時間ve[i](1<=i<=n-1).如果得到的拓撲有序序列中頂點個數小於頂點數n,則說明網中存在環,不能求關鍵路徑,演算法終止;否則執行步驟(3);

(3)從匯點vn出發,令vl[n-1]=ve[n-1],按逆拓撲有序求其各頂點的最遲發生時間vl[i](n-2>=i>=2);

(4)根據各頂點的ve和vl值,求每條弧的最早開始時間ee和最遲開始時間el,若某條弧滿足條件ee=el,則為關鍵活動。

如上所述,計算各頂點的ve和vl值是在拓撲排序的過程中進行的,需對拓撲排序的演算法作如下修改:(a)在拓撲排序之前設初值,令ve[i]=0(0<=i<=n-1);(b)在演算法中增加乙個計算vj的直接後繼vk的最早發生時間的操作:若ve[j]+dut()>ve[k],則ve[k]=ve[j]+dut();   (c) 為了能按逆拓撲有序序列的順序計算各頂點的vl值,需記下在拓撲排序的過程中求得的拓撲有序序列,這需要在拓撲排序演算法中,增設乙個棧以記錄拓撲排序序列,則在計算求得各頂點的ve值之後,從棧頂至棧底便為逆拓撲有序序列。

乙個無環的有向圖稱為無環圖(

directed acyclic graph

),簡稱

dag圖。

aoe(activity on edge)網:顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所示:

如上所示,共有11

項活動(11

條邊),9

個事件(9

個頂點)。整個工程只有乙個開始點和乙個完成點。即只有乙個入度為零的點(源點)和只有乙個出度為零的點(匯點)。

關鍵路徑:是從開始點到完成點的最長路徑的長度。路徑的長度是邊上活動耗費的時間。如上圖所示,1 

到2 到 5

到7到9

是關鍵路徑(關鍵路徑不止一條,請輸出字典序最小的),權值的和為18。

這裡有多組資料,保證不超過10

組,保證只有乙個源點和匯點。輸入乙個頂點數n(2<=n<=10000),

邊數m(1<=m <=50000),

接下來m

行,輸入起點sv

,終點ev,

權值w(1<=sv,ev<=n,sv != ev,1<=w <=20)

。資料保證圖連通。

關鍵路徑的權值和,並且從源點輸出關鍵路徑上的路徑(如果有多條,請輸出字典序最小的)。

9 11

1 2 6

1 3 4

1 4 5

2 5 1

3 5 1

4 6 2

5 7 9

5 8 7

6 8 4

8 9 4

7 9 2

18

1 22 5

5 77 9

#include #include #include #include using namespace std;

struct arcnode

;struct vnode

head[20000];

struct node

;int ve[20000],vl[20000];

int sta[20000],top;

int topo(int n)

}for(j=1;j<=n;j++)

for(p=head[j].first;p;p=p->next)

topo(n);

criticalpath(n);

}return 0;

}

AOE網上的關鍵路徑

time limit 1000ms memory limit 65536k 乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱 dag圖。aoe activity on edge 網 顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所...

AOE網上的關鍵路徑

乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱 dag圖。aoe activity on edge 網 顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所示 如上所示,共有11 項活動 11 條邊 9 個事件 9 個頂點 整個工程...

AOE網上的關鍵路徑

乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱 dag圖。aoe activity on edge 網 顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所示 如上所示,共有11 項活動 11 條邊 9 個事件 9 個頂點 整個工程...