關鍵路徑的概念和算法

AOE網:在一個表示工程的帶權有向圖中,用頂點表示事件,用有向邊表示活動,邊上的權值表示活動的持續時間,稱這樣的有向圖叫做邊表示活動的網,簡稱AOE網。AOE網中沒有入邊的頂點稱為始點(或源點),沒有出邊的頂點稱為終點(或匯點)。

AOE網的性質

⑴ 只有在某頂點所代表的事件發生后,從該頂點出發的各活動才能開始;

⑵ 只有在進入某頂點的各活動都結束,該頂點所代表的事件才能發生。

關鍵路徑:在AOE網中,從始點到終點具有最大路徑長度(該路徑上的各個活動所持續的時間之和)的路徑稱為關鍵路徑。

關鍵活動:關鍵路徑上的活動稱為關鍵活動。關鍵活動:e[i]=l[i]的活動

  由于AOE網中的某些活動能夠同時進行,故完成整個工程所必須花費的時間應該為始點到終點的最大路徑長度。關鍵路徑長度是整個工程所需的最短工期。

與關鍵活動有關的量

⑴ 事件的最早發生時間ve[k]

  ve[k]是指從始點開始到頂點vk的最大路徑長度。這個長度決定了所有從頂點vk發出的活動能夠開工的最早時間。

    

⑵ 事件的最遲發生時間vl[k]

  vl[k]是指在不推遲整個工期的前提下,事件vk允許的最晚發生時間。

   ?

?

⑶ 活動的最早開始時間e[i]

  若活動ai是由弧<vk?,?vj>表示,則活動ai的最早開始時間應等于事件vk的最早發生時間。因此,有:e[i]=ve[k]

⑷ 活動的最晚開始時間l[i]

  活動ai的最晚開始時間是指,在不推遲整個工期的前提下,?ai必須開始的最晚時間。若ai由弧<vkvj>表示,則ai的最晚開始時間要保證事件vj的最遲發生時間不拖后。因此,有:l[i]=vl[j]-len<vk,vj>

?

示例:

  

所以:

代碼實現:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Status TopologicalOrder(ALGraph G, Stack &T)
{
????// 有向網G采用鄰接表存儲結構,求各頂點事件的最早發生時間ve(全局變量)。
????// T為拓撲序列定點棧,S為零入度頂點棧。
????// 若G無回路,則用棧T返回G的一個拓撲序列,且函數值為OK,否則為ERROR。
????Stack S;
????intcount=0,k;
????charindegree[40];
????ArcNode *p;
????InitStack(S);
????FindInDegree(G, indegree);?// 對各頂點求入度indegree[0..vernum-1]
????for(int?j=0; j<G.vexnum; ++j)?????// 建零入度頂點棧S
????????if(indegree[j]==0)
????????????Push(S, j);?// 入度為0者進棧
????InitStack(T);//建拓撲序列頂點棧T
????count = 0;?
????for(inti=0; i<G.vexnum; i++)
????????ve[i] = 0;?// 初始化
????while(!StackEmpty(S))
????{
????????Pop(S, j);? Push(T, j);? ++count;??????// j號頂點入T棧并計數
????????for(p=G.vertices[j].firstarc;? p;? p=p->nextarc)
????????{
????????????k = p->adjvex;???????????// 對j號頂點的每個鄰接點的入度減1
????????????if(--indegree[k] == 0) Push(S, k);???// 若入度減為0,則入棧
????????????if(ve[j]+p->info > ve[k])? ve[k] = ve[j]+p->info;
????????}//for? *(p->info)=dut(<j,k>)
????}
????if(count<G.vexnum)
????????returnERROR;??// 該有向網有回路
????else
????????returnOK;
}

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Status CriticalPath(ALGraph G)
{
????// G為有向網,輸出G的各項關鍵活動。
????Stack T;
????inta,j,k,el,ee,dut;
????chartag;
????ArcNode *p;
????if(!TopologicalOrder(G, T))
????????returnERROR;
????for(a=0; a<G.vexnum; a++)
????????vl[a] = ve[G.vexnum-1];???// 初始化頂點事件的最遲發生時間
????while(!StackEmpty(T))???????// 按拓撲逆序求各頂點的vl值
????????for(Pop(T, j), p=G.vertices[j].firstarc;? p;? p=p->nextarc)
????????{
????????????k=p->adjvex;? dut=p->info;????//dut<j,k>
????????????if(vl[k]-dut < vl[j])
????????????????vl[j] = vl[k]-dut;
????????}
????for(j=0; j<G.vexnum; ++j)????????????// 求ee,el和關鍵活動
????????for(p=G.vertices[j].firstarc;? p;? p=p->nextarc)
????????{
????????????k=p->adjvex;dut=p->info;??
????????????ee = ve[j];? el = vl[k]-dut;
????????????tag = (ee==el) ?'*'?:?' ';
????????????printf(j, k, dut, ee, el, tag);??// 輸出關鍵活動
????????}
????returnOK;
}

轉載于:https://www.cnblogs.com/hongyang/articles/3407666.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376309.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

160 - 51 DueList.6

環境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查殼 發現程序沒有加殼&#xff0c;那么我們可以直接分析了。 0x01 分析 運行程序看一看 看到錯誤信息的字符串后我們可以直接搜索了。 可以看到程序會比較輸入的長度是否為8位&#xff0c;如…

寬帶上行速率和下行速率的區別

本文由廣州寬帶網http://www.ymeibai.com/整理發布&#xff0c;廣州電信寬帶報裝&#xff0c;上廣州寬帶網。 我們一般所說的4M寬帶&#xff0c;6M寬帶&#xff0c;都是指寬帶的下行速率&#xff0c;可以理解為就是下載的速度&#xff0c;平時我們用迅雷、或者網頁下載軟件時&a…

LazyInitializationException--由于session關閉引發的異常

1,頁面中進行person.department.departmentName的讀取 2,Action 中只讀取了person&#xff0c;事務作用在Service的方法中 3,后臺會有org.hibernate.LazyInitializationException出現 因為&#xff1a;Action中Service方法結束之前&#xff0c;session已經關閉了轉載于:https:/…

160 - 52 egis.1

環境&#xff1a;windows xp 工具&#xff1a; 1、OllyDBG 2、exeinfo 3、IDA 0x00 查殼 加了UPX殼&#xff0c;那么就要脫殼了。可以使用單步法來脫殼。 UPX殼還是比較簡單的&#xff0c;開頭pushad&#xff0c;找個popad&#xff0c;然后就是jmp了。 然后就可以用OD來…

玩轉MySQL之Linux下的簡單操作(服務啟動與關閉、啟動與關閉、查看版本)

小弟今天記錄一下在Linux系統下面的MySQL的簡單使用&#xff0c;如下&#xff1a; 服務啟動與關閉 啟動與關閉 查看版本 環境 Linux版本&#xff1a;centeros 6.6&#xff08;下面演示&#xff09;&#xff0c;Ubuntu 12.04&#xff08;參見文章末尾紅色標注字體&#xff09; M…

實驗八第二題

轉載于:https://www.cnblogs.com/huangsilinlana/p/3411550.html

c++ boost多線程學習(一)

本次學習相關資料如下&#xff1a; Boost C 庫 第 6 章 多線程&#xff08;大部分代碼的來源&#xff09; Boost程序庫完全開發指南 - 深入C“準”標準庫 第三版 羅劍鋒著 頭文件&#xff1a; #include <stdio.h> #include <string.h> #include <boost\versio…

C#中什么是泛型

所謂泛型是指將類型參數化以達到代碼復用提高軟件開發工作效率的一種數據類型。一種類型占位符&#xff0c;或稱之為類型參數。我們知道一個方法中&#xff0c;一個變量的值可以作為參數&#xff0c;但其實這個變量的類型本身也可以作為參數。泛型允許我們在調用的時候再指定這…

敏捷自動化測試(1)—— 我們的測試為什么不夠敏捷?

測試是為了保證軟件的質量&#xff0c;敏捷測試關鍵是保證可以持續、及時的對軟件質量情況進行全面的反饋。由于在敏捷開發過程中每個迭代都會增加功能、修復缺陷或重構代碼&#xff0c;所以在完成當前迭代新增特性測試工作的同時&#xff0c;還要通過回歸測試來保證歷史功能不…

學習c++

目錄 一 、 boost庫&#xff1a; 1. 多線程 c boost多線程學習&#xff08;一&#xff09; 二 、數據庫&#xff1a; 三、socket編程&#xff1a; c socket學習&#xff08;1.1&#xff09; c socket學習&#xff08;1.2&#xff09; c socket學習&#xff08;1.3&#x…

mysql5.6與mysql5.5不同

1.編譯階段 要明白with與without的區別&#xff0c;選項值分1和0&#xff0c;或者對應為on或off&#xff0c;代表支持與不支持&#xff1b;with的1&#xff08;on&#xff09;與without的0&#xff08;off&#xff09;是同樣的&#xff0c;with的0&#xff08;off&#xff09;與…

c++ 基本排序算法學習

C實現排序算法 代碼地址 vector<unsigned int> cVec; int nSize cVec.size();1 冒泡排序 算法思路&#xff1a; 每兩兩相鄰的數值都會比較大小&#xff0c;前面比后面大的時候就交換位置&#xff0c;否則就不動。 代碼&#xff1a; void BubbleSort() {//優化&#x…

ios 程序學習

馬上著手開發iOS應用程序&#xff1a;五、提交應用與尋找信息 2013-01-11 15:36 佚名 apple.com 我要評論(0) 字號&#xff1a;T | T本文介紹了您已經學習完如何開發一個優秀的iOS應用之后&#xff0c;應該掌握的內容&#xff0c;包括將您的應用提交到App Store讓其他人下載&am…

解決SimpleButton被移除后保持OVER狀態

假設場景中有一SimpleButton叫testBtn,執行下面操作&#xff1a;1.鼠標移上testBtn&#xff0c; testBtn狀態變為OVER2.移除testBtn&#xff0c;removeChild(testBtn)3.5秒后重新添加testBtn到場景此時&#xff0c;看見testBtn還是OVER狀態。解決方法&#xff1a;1.記錄testBtn…

c++ socket學習(1.1)

本文學習相關資料&#xff1a; C/C socket編程教程 環境&#xff1a;vs2015 源碼&#xff1a;本文代碼 windows 如何創建客戶端與服務端通信&#xff1f; TCP&#xff1a; 服務端 在windows先告訴程序我們要使用哪個版本的winsock&#xff0c;成功調用了它才能繼續下去 #…

c++ socket學習(1.2)

本文學習相關資料&#xff1a; C/C socket編程教程 環境&#xff1a;vs2015 源碼&#xff1a;本文代碼 windows 如何創建客戶端與服務端通信&#xff1f; UDP&#xff1a; 這次就沒什么客戶端服務端好說了&#xff0c;UDP是沒有無連接的 所以改叫接收端和發送端吧 接收端 …

js高級功能與高級需求、高級期待

http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html 簡單練習題&#xff1a;http://tieba.baidu.com/p/2189347922 ---------------------- scope鏈 閉包 Javascript屬性prototype node.js metaprogramming AMD、CMD機制 http://www.makumo.com/js-modules-amd-c…

synchronized同步鎖

在多線程的情況下&#xff0c;由于同一進程的多個線程共享同一片存儲空間&#xff0c;在帶來方便的同時&#xff0c;也帶來了訪問沖突這個嚴重的問題。Java語言提供了專門機制以解決這種沖突&#xff0c;有效避免了同一個數據對象被多個線程同時訪問。由于我們可以通過 private…

c++ socket學習(1.3)

本文學習相關資料&#xff1a; C/C socket編程教程 環境&#xff1a;vs2015 源碼&#xff1a;本文代碼 在這里c socket學習&#xff08;1.1&#xff09;學到了怎么樣建立TCP&#xff0c;然后通過TCP連接發送、接收信息。 但是都是一次性的&#xff0c;當時是接收信息后就結束…

一個一線城市的IT白領的生活成本:3萬/年

自從大學畢業&#xff0c;經濟獨立&#xff0c;就開始全面統計各種生活開支。仔細的去統計下&#xff0c;發現開銷還是挺大的。 定理&#xff1a;開銷越大&#xff0c;就意味著你每個月的收入必須越高。 三族鼎立節余族: 收入-開支 > 0月光族&#xff1a;收入-開支 0透支族…