精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

六講貫通C++圖的應用之六 活動網絡(AOV、AOE)

開發 后端
圖的應用恐怕是C++所有數據結構中最寬泛的了,本次六講筆者從基本儲存方法、DFS和BFS、無向圖、最小生成樹、最短路徑以及活動網絡(AOV、AOE)六個方面詳細介紹圖的應用。本文是這次系列文章的最后一篇,主要介紹活動網絡(AOV、AOE)。

 

  筆者從基本儲存方法、DFS和BFS、無向圖最小生成樹、最短路徑以及活動網絡(AOV、AOE)六個方面詳細介紹C++圖的應用。我們已經前面的文章介紹了前五個方面的知識,今天我們介紹***一個——活動網絡(AOV、AOE)。

  活動網絡(AOV、AOE)

  這部分是和工程相關的,也就是說,當AOV、AOE很復雜的時候,才能顯示出這部分的價值——簡單的話,手工都要比程序快,輸入數據那段時間手工結果就出來了。我也沒什么例子好舉,總給我一種沒底氣的感覺,勉為其難的把程序寫完就算完事吧。和前邊的相比,這部分專業了一點,換而言之,不是每個人都感興趣,不想看就跳過去吧。

  準備工作

  活動網絡主要有兩個算法,拓撲排序和求關鍵路徑,后者以前者為基礎。仿照上篇,另外構造一個“算法類”,需要算法時,將圖綁定到算法上。

  1. #include "Network.h"   
  2. #define iterator list::edge>::iterator   
  3. #define begin(i) G->data.vertices[i].e->begin()   
  4. #define end(i) G->data.vertices[i].e->end()   
  5. struct CriAct   
  6. {   
  7. CriAct() {}   
  8. CriAct(int source, int dest) : s(source), d(dest) {}   
  9. int s, d;   
  10. };   
  11. template <class name, class dist>   
  12. class ActivityNetwork   
  13. {   
  14. public:   
  15. ActivityNetwork(Network >* G) : G(G), N(G->vNum()), outCriAct(CA)   
  16. {   
  17. count = new int[N]; result = new int[N];   
  18. }   
  19. ~ActivityNetwork()   
  20. {   
  21. delete []count; delete []result;   
  22. }   
  23. const vector& outCriAct;   
  24. const int* out;   
  25. private:   
  26. void initialize()   
  27. {   
  28. for (int j = 0; j < N; j++) count[j] = 0;   
  29. for (int i = 0; i < N; i++)   
  30. {   
  31. for (iterator iter = begin(i); iter != end(i); iter++) count[iter->vID]++;   
  32. }   
  33. out = result;   
  34. }   
  35. Network >* G;   
  36. vector CA;   
  37. int N, *count, *result;   
  38. };  

  因為AOV和AOE的邊都不會太多(想象一下邊多的情況,那事件就都是雞毛蒜皮了),所以儲存結構直接選擇了鄰接表。并且為了體現鄰接表的優勢,需要直接操作私有數據,因此要把這個類聲明為Link類和Network類的友元,另外由于這個類在后面,所以需要前視聲明。具體如下:

  1. template <class name, class dist> class ActivityNetwork;   
  2. template <class name, class dist> class Link   
  3. {friend class ActivityNetwork;};   
  4. template <class name, class dist, class mem> class Network   
  5. friend class ActivityNetwork;};  

#p#

  拓撲排序

  這個算法很精巧,避免了對已經排好序的頂點的再次掃描,另外,殷版上用計數數組來充當棧的方法也很巧妙。算法的說明參閱相關的教科書,不再贅述。

  1. bool TopoSort()   
  2. {   
  3. initialize(); int i, top = -1;   
  4. for (i = 0; i < N; i++) if (!count[i]) { count[i] = top; top = i; }   
  5. for (i = 0; i < N; i++) //TopoSort Start   
  6. {   
  7. if (top == -1) return false;   
  8. result[i] = top; top = count[top];   
  9. for (iterator iter = begin(result[i]); iter != end(result[i]); iter++)   
  10. if (!--count[iter->vID]) { count[iter->vID] = top; top = iter->vID; }   
  11. }   
  12. return true;   
  13. }  

  由于public數據成員out和private數據成員result指向同一個數組,在類的外面可以通過out來得到排序結果,只是不能改變(當然,非要改變const數據也不是沒有辦法)。下面是測試程序,數據來自殷版:

  1. #include    
  2. using namespace std;   
  3. #include "ActivityNetwork.h"   
  4. int main()   
  5. {   
  6. Network<intint, Link<intint> > a;   
  7. a.insertV(0);a.insertV(1);a.insertV(2);a.insertV(3);a.insertV(4);a.insertV(5);   
  8. a.insertE(0,3,1);a.insertE(0,1,1);a.insertE(1,5,1);a.insertE(2,1,1);   
  9. a.insertE(2,5,1);a.insertE(4,0,1);a.insertE(4,1,1);a.insertE(4,5,1);   
  10. ActivityNetwork<intint> b(&a);   
  11. if (b.TopoSort()) for (int i = 0; i < a.vNum(); i++) cout << b.out[i] << ' ';   
  12. return 0;   
  13. }  

  關鍵路徑

  有了拓撲排序的結果,這個程序就比較好寫了,那些所謂的“技巧”就不用了,如下的程序,很直白,算法說明請參考教科書。

  1. bool CriPath()   
  2. {   
  3. if (!TopoSort()) return falseint i; iterator iter; CA.clear();   
  4. dist* Ve = new dist[N]; dist* Vl = new dist[N];//Ve最早開始時間,Vl最遲開始時間   
  5. for (i = 0; i < N; i++) Ve[i] = 0;//Ve初始化   
  6. for (i = 0; i < N; i++)//按拓撲順序計算Ve   
  7. for (iter = begin(result[i]); iter != end(result[i]); iter++)   
  8. if (Ve[result[i]]+iter->cost>Ve[iter->vID]) Ve[iter->vID]= Ve[result[i]] + iter->cost;   
  9. for (i = 0; i < N; i++) Vl[i] = Ve[N - 1];//Vl初始化   
  10. for (i = N - 2; i >= 0; i--)//按逆拓撲順序計算Vl   
  11. for (iter = begin(result[i]); iter != end(result[i]); iter++)   
  12. if (Vl[iter->vID]-iter->cost < Vl[result[i]]) Vl[result[i]] = Vl[iter->vID] - iter->cost;   
  13. for (i = 0; i < N; i++)//計算各個活動的最早開始時間和最遲開始時間   
  14. for (iter = begin(i); iter != end(i); iter++)   
  15. if (Ve[i] == Vl[iter->vID] - iter->cost) CA.push_back(CriAct(i, iter->vID));   
  16. return true;   
  17. }  

  同樣的在類的外面可以通過outCriAct得到結果,是一個const引用。如下的測試程序,數據來自殷版:

  1. #include    
  2. using namespace std;   
  3. #include "ActivityNetwork.h"   
  4. int main()   
  5. {   
  6. Network<intint, Link<intint> > a;   
  7. a.insertV(0);a.insertV(1);a.insertV(2);a.insertV(3);a.insertV(4);   
  8. a.insertV(5); a.insertV(6);a.insertV(7);a.insertV(8);   
  9. a.insertE(0,1,6);a.insertE(0,2,4);a.insertE(0,3,5);   
  10. a.insertE(1,4,1);a.insertE(2,4,1);a.insertE(3,5,2);   
  11. a.insertE(4,6,9);a.insertE(4,7,7);a.insertE(5,7,4);   
  12. a.insertE(6,8,2);a.insertE(7,8,4);   
  13. ActivityNetwork<intint> b(&a);   
  14. if (b.CriPath())   
  15. for (int j = 0; j < b.outCriAct.size(); j++)   
  16. cout <<'<'<',' << a.getV(b.outCriAct[j].d) << '>' << ' ';   
  17. return 0;   
  18. }  

#p#

  總結

  不同于前面的鏈表和樹,在圖這里,儲存方法不是重點,我們更多的注意力放在了算法上。我在寫程序的時候,也盡量做到了算法和儲存方法無關。然而算法實際上就是現實問題的抽象,如果我們的常識所不及,我們也就沒有辦法來介紹算法,反過來說,幾乎遇不到的問題,我們也不會對它的算法感興趣。

  因此,在圖的算法里面,由鋪設管道引出了最小生成樹,由提高通信、交通網絡可靠性引出了關節點和重連通分量,由地圖尋徑引出了最短路徑,由工程預算引出了關鍵路徑。這些恐怕是我們能夠理解的全部了,如果再來一個電氣網絡計算,沒點物理知識恐怕是要完。

  但即使這樣,上面的各個算法仍然離我們很遠,我們大多數人恐怕永遠都不會知道管道是怎么鋪的。我想,這里面除了最短路徑能引起大多數人的興趣之外,其他的就只能走馬觀花的看看罷了。這也使得圖的學習很像“聾子的耳朵”,真正接觸到圖的用途的人不多,并且即使用到圖,也僅僅是個別的算法。

  正像數據結構教學的通病一樣,學無所用常常導致學無所成,前面的鏈表、樹好歹還能做點什么東西出來,到了圖這里,除了做個導游系統,我們也做不出別的什么了。寫到這里很無奈,但我也只能是無奈……

  那么,學完了圖,我們應該掌握什么呢,是上面零散的算法嗎?我的看法是,不是。我覺得我們更應該知道那些算法是怎么“創造”出來的,如果遇到了類似的問題,能不能“派生”出新的算法。因此,我覺得《數據結構算法與應用-C++語言描述》這本書,將圖的最小生成樹、最短路徑、拓撲排序算法放到了貪婪算法里講解,是一種更為合理的安排。

【編輯推薦】

  1. 經典四講貫通C++排序之一 插入排序
  2. c++編程常用工具
  3. 給C++初學者的50個忠告
  4. c++最基礎的20條規則
  5. 程序員必看 c++筆試題匯總
責任編輯:韓亞珊 來源: 天極網
相關推薦

2011-04-11 16:10:55

無向圖C++

2011-04-11 16:32:28

路徑C++

2011-04-11 16:19:56

C++

2011-04-11 15:53:40

C++

2011-04-11 15:57:22

DFSBFSC++

2010-06-29 19:23:20

UML活動圖

2011-04-11 14:52:18

選擇排序排序C++

2011-04-11 14:21:43

希爾排序排序C++

2010-06-18 18:18:48

UML活動圖

2010-06-09 17:58:14

UML活動圖

2011-04-11 13:41:34

插入排序排序C++

2011-04-11 14:29:44

交換排序冒泡排序排序

2024-05-30 07:41:22

2012-09-24 15:35:24

C#網絡協議UDP

2011-10-10 09:45:34

網絡虛擬化虛擬化

2020-09-03 14:45:09

C語言開源項目

2012-12-12 16:07:46

VMwareWorkstation

2010-07-06 09:48:34

六大UML圖

2010-01-14 09:27:44

C++語言

2025-03-13 14:13:46

點贊
收藏

51CTO技術棧公眾號

亚洲无线视频| 日韩中文字幕一区二区高清99| av电影在线观看完整版一区二区| 97超级碰碰碰久久久| www.久久av| 本网站久久精品| 亚洲精品va在线观看| 久久精品人人做人人爽电影| 伊人久久一区二区| 午夜精品国产| 亚洲日本欧美日韩高观看| 国产精品自在自线| 欧美aa在线观看| 亚洲欧洲日韩av| 狠狠综合久久av| 亚洲专区第一页| 亚洲小说欧美另类社区| 国产亚洲精品成人av久久ww | 亚洲毛片网站| 综合网中文字幕| 2018国产精品| 少妇精品视频一区二区免费看| 一区二区三区中文字幕| 日韩国产高清一区| 狠狠人妻久久久久久综合麻豆| 日韩成人一级大片| 久久久久久亚洲精品中文字幕| 亚洲а∨天堂久久精品2021| 第四色中文综合网| 7777精品伊人久久久大香线蕉经典版下载| 精品欧美一区免费观看α√| 超碰超碰在线| 久久精品一区二区三区av| 中文在线免费一区三区高中清不卡| 精品国一区二区三区| 一区二区成人网| 欧美a级在线观看| 亚洲精品高清在线| 在线一区高清| 在线免费av网站| 久久综合丝袜日本网| 风间由美久久久| 99国产在线播放| 久久99精品国产麻豆婷婷| 欧美一区二区影院| 亚欧视频在线观看| 国产精品a级| 欧美成人精品影院| 欧美一区免费观看| 99久精品视频在线观看视频| 一区二区日韩精品| www在线观看免费视频| 欧美深夜视频| 亚洲激情在线观看| 精品一区二区三区四区五区六区| 97久久精品一区二区三区的观看方式| 在线亚洲精品福利网址导航| www.浪潮av.com| 7777kkk亚洲综合欧美网站| 一区二区三区四区在线免费观看| 樱空桃在线播放| 麻豆传媒在线免费看| 国产精品毛片久久久久久久| 亚洲人久久久| 免费观看久久久久| 亚洲视频一二区| 乱子伦一区二区| av免费网站在线观看| 亚洲乱码国产乱码精品精可以看 | 国产a级一级片| 日产福利视频在线观看| 黑人巨大精品欧美一区免费视频 | 99在线视频免费| 欧美日韩性在线观看| 色噜噜国产精品视频一区二区| 中文字幕精品亚洲| 亚洲一区二区三区| 欧美黑人性猛交| 日韩免费不卡视频| 欧美亚洲一区| 国产精品久久久久久久电影| 一级全黄裸体免费视频| 国产一区二区调教| 精品国产一区二区三区久久久久久| 天天爽夜夜爽夜夜爽| 91浏览器在线视频| 在线国产伦理一区| heyzo在线欧美播放| 欧美日韩中文字幕在线视频| 午夜激情在线观看视频| 疯狂欧洲av久久成人av电影| 精品成人一区二区三区| 国产精品一区二区入口九绯色| 国产精品中文字幕亚洲欧美| 久久久精品免费| 国产性xxxx高清| 日本特黄久久久高潮| 亚洲精品欧美日韩| 香蕉av在线播放| 中文一区在线播放| www.av蜜桃| 色婷婷综合久久久中字幕精品久久| 欧美乱妇一区二区三区不卡视频| 亚洲精品一区二区18漫画| 美女精品一区最新中文字幕一区二区三区| 一个色综合导航| 免费无遮挡无码永久在线观看视频 | 精品国产一区二区三区久久久蜜月 | 国产又黄又粗又猛又爽的| 尤物网精品视频| 国产精品日韩精品| 日本久久一级片| 中文字幕中文字幕一区| 无码人妻精品一区二区三区在线| 看片一区二区| 日韩精品在线私人| 国产suv一区二区三区| 久久一区国产| 国产精品一区二区不卡视频| 久久77777| 欧美日韩亚洲视频一区| 亚洲高清av一区二区三区| 国产午夜一区| 久久久久久久久久久亚洲| 一本到在线视频| 91老师片黄在线观看| 国产制服91一区二区三区制服| 日本成人三级电影| 欧美精品一区二区蜜臀亚洲| 黄色录像免费观看| 男男视频亚洲欧美| 欧美日韩亚洲一区二区三区在线观看| 欧美aaaaaaa| 宅男在线国产精品| 在线观看天堂av| 秋霞影院一区二区| 欧美日韩最好看的视频| 538在线视频| 欧美成人video| 91在线播放观看| 久久国产精品99久久人人澡| 日韩视频在线播放| 国产精品伦理| 亚洲欧美国产日韩天堂区| 日本少妇性生活| 成人免费视频网站在线观看| 美女在线免费视频| 精品国产一区二区三区性色av| 中文日韩电影网站| 特级西西444www高清大视频| 国产婷婷色一区二区三区| 91免费视频网站在线观看| 久久成人福利| 97不卡在线视频| 日韩电影免费| 色综合一区二区| 国产全是老熟女太爽了| 日日夜夜免费精品| 日韩免费av电影| a∨色狠狠一区二区三区| 一区二区在线视频| 亚洲一区二区影视| 成人欧美一区二区三区在线播放| 色播五月综合网| 91亚洲人成网污www| 91在线精品播放| 羞羞的视频在线看| 亚洲第一中文字幕| 国产美女激情视频| 国产欧美中文在线| 精品综合久久久久| 影音先锋日韩资源| 国新精品乱码一区二区三区18| 毛片电影在线| 国产香蕉精品视频一区二区三区 | 女尊高h男高潮呻吟| 免费在线播放第一区高清av| 欧美三级网色| 欧美97人人模人人爽人人喊视频| 欧美成人小视频| 天堂在线中文网| 色8久久人人97超碰香蕉987| 亚洲综合第一区| 国产精品亚洲人在线观看| 大陆av在线播放| 亚洲图区在线| 成人精品一区二区三区电影免费| 中国av在线播放| 日韩精品欧美激情| 一级黄色片在线播放| 一区二区三区国产| 波多野在线播放| 国产精品一区在线观看乱码| 久久久久久久中文| 99久久影视| 国产亚洲精品久久飘花| 欧美精品资源| 欧美激情国产高清| 国产三级在线看| 日韩三级在线观看| 中文字幕 人妻熟女| 一级中文字幕一区二区| 国产熟妇久久777777| 国产精品亚洲人在线观看| 日韩中文字幕组| 欧美日韩亚洲一区三区| 日韩福利影院| 成人h动漫精品一区二区器材| 国产精品久久久久久一区二区| 麻豆蜜桃在线| 中文字幕欧美视频在线| 黄频在线免费观看| 69av一区二区三区| 日韩免费av网站| 亚洲一区二区在线观看视频| 国产三级短视频| 91色视频在线| 日本人妻一区二区三区| 蜜臀久久99精品久久久久宅男 | 久久只有精品| 精品国偷自产一区二区三区| 日韩一区电影| 欧美一区二区三区四区夜夜大片| 一区二区三区国产好| 国产精品亚洲片夜色在线| 综合日韩av| 欧美激情手机在线视频 | 国产一区二区三区四区五区3d| 91精品国产91久久| 日韩三级电影视频| 久久天天躁狠狠躁夜夜av| 高清毛片在线看| 精品一区二区电影| 日韩在线视频免费| 精品久久久久香蕉网| 99久久精品国产一区二区成人| 欧洲精品中文字幕| 中文字幕日韩免费| 黑人欧美xxxx| 久久国产黄色片| 欧美日韩精品二区| 一级黄色免费网站| 香蕉久久一区二区不卡无毒影院| 高h视频免费观看| 日韩一区中文字幕| 日韩一区二区不卡视频| 国产精品卡一卡二卡三| 色www亚洲国产阿娇yao| 国产欧美一区二区三区鸳鸯浴 | 国产精品国产亚洲精品| 成人国产精品色哟哟| 伊人久久一区| 91在线视频免费| 国产成人免费av一区二区午夜| 精品国产精品国产偷麻豆| 国产精品久久77777| 天天免费亚洲黑人免费| 日韩av片免费在线观看| 一本大道色婷婷在线| 91成人天堂久久成人| 亚洲综合电影| 国产91精品视频在线观看| 中文字幕色婷婷在线视频| 日本精品久久久| 美女色狠狠久久| 国产日韩欧美视频在线| www.成人在线.com| aaa级精品久久久国产片| 中文字幕一区图| 国产色综合一区二区三区| 丝袜美腿综合| 日韩电影大全在线观看| 国产精品毛片一区二区在线看| 在线观看成人免费| 激情欧美日韩一区| 亚洲色成人一区二区三区小说| 亚洲欧美成人综合| 亚洲一区二区三区四区五区| 国产一区视频导航| 亚洲熟女一区二区| 国产三级精品三级| 91香蕉一区二区三区在线观看| 一区二区三区在线免费播放| 中文字幕亚洲精品一区| 在线看日韩精品电影| 国产精品久久久久久在线| 亚洲电影在线观看| 国产日本在线观看| 九九久久久久99精品| 136福利第一导航国产在线| 国产va免费精品高清在线| 亚洲二区av| 国产一级精品aaaaa看| 精品久久91| av不卡在线免费观看| 国产情侣一区| 中文av字幕在线观看| 成人免费高清视频| 日韩一区二区三区四区视频| 亚洲成人av福利| 在线观看黄色国产| 亚洲国产精品久久久久秋霞不卡| 国产福利电影在线| 久久久久国产精品一区| 韩国三级一区| 国产精品一区二区三区在线观| 成人aaaa| 日韩激情免费视频| 国产精品影视天天线| 一级片久久久久| 亚洲成av人片在www色猫咪| 中文字幕永久在线视频| 日韩成人在线免费观看| av免费在线观看网址| 国产精品白丝jk喷水视频一区 | 青青影院在线观看| 5566成人精品视频免费| 麻豆精品国产| 亚洲区一区二区三区| 校园激情久久| 美女日批在线观看| 亚洲图片欧美激情| 久久精品国产亚洲av麻豆蜜芽| 亚洲黄色片网站| 污污的网站在线看| 国产深夜精品福利| 国产亚洲一区二区三区不卡| 成人毛片一区二区| 丁香另类激情小说| 欧美三级日本三级| 欧美精品视频www在线观看| 国内在线精品| 欧美一区亚洲一区| 精品av导航| 轻点好疼好大好爽视频| 狠狠色丁香婷婷综合| 日韩亚洲欧美中文字幕| 91极品美女在线| 日韩porn| 欧洲亚洲女同hd| 日韩三级毛片| 超碰成人免费在线| 成人av第一页| 国产一国产二国产三| 欧美成人在线直播| 手机av免费在线| 99国产精品久久久久老师| 欧美激情1区2区3区| 超级砰砰砰97免费观看最新一期 | 亚洲久久一区二区| 亚洲精品一区二区18漫画| 亚洲精品国产精华液| 精品欧美在线观看| 欧美精品免费看| 亚洲一区二区三区免费| 国产aaa免费视频| 成人动漫一区二区| 日韩网红少妇无码视频香港| 亚洲国产精彩中文乱码av在线播放| 金瓶狂野欧美性猛交xxxx| 国产精品中出一区二区三区| 雨宫琴音一区二区在线| 给我看免费高清在线观看| 在线一区二区观看| 日本在线天堂| 亚洲最大激情中文字幕| 亚洲性色视频| 熟女少妇一区二区三区| 欧美在线观看视频一区二区三区 | 色妞ww精品视频7777| 国产免费裸体视频| 99re热视频精品| 香蕉影院在线观看| 色婷婷综合久久久久中文字幕1| 欧美××××黑人××性爽 | 欧美女激情福利| 日b视频在线观看| 色噜噜狠狠一区二区三区果冻| 成人在线免费公开观看视频| 国产综合在线观看视频| 亚洲国产高清视频| 久久av无码精品人妻系列试探| 欧美影视一区二区三区| 国产精品一卡二卡三卡| 国产精选一区二区| 日本亚洲最大的色成网站www| 亚洲波多野结衣| 日韩不卡中文字幕| 国外成人福利视频| 日韩美女爱爱视频| 国产欧美日韩卡一| 精品国产黄色片| 国产成人精品在线| 国自产拍偷拍福利精品免费一| 极品白嫩丰满美女无套| 欧美精品一二三区| 伊人久久国产| 91视频 - 88av| 国产亚洲成年网址在线观看| av网站在线观看免费|