精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产三级网| 国产成人精品亚洲777人妖| 亚洲精品在线观看网站| 青青草综合在线| 亚洲免费国产视频| 久久精品国内一区二区三区水蜜桃| 欧美午夜宅男影院| 日本一区不卡| 一级片一区二区三区| 欧美电影《轻佻寡妇》| 欧美一区二区三区在线观看 | 国产精品夜夜嗨| 欧美日韩成人在线观看| 中文字幕免费高清视频| 日韩制服一区| 亚洲三级在线看| 国产一区高清视频| 这里只有精品999| 中文字幕午夜精品一区二区三区| 亚洲成人在线网| 欧美日韩一区二区在线免费观看| 在线看av的网址| 国产1区2区3区精品美女| 欧美在线观看网站| 人与动物性xxxx| 伊人精品综合| 欧美综合视频在线观看| 国产黄色激情视频| 天天综合在线视频| 韩国三级中文字幕hd久久精品| 欧美巨猛xxxx猛交黑人97人| 性欧美成人播放77777| 日韩黄色碟片| 日韩欧美在线一区| 熟妇熟女乱妇乱女网站| 日韩av免费观影| 国产一区二区精品久久| 久久久噜噜噜久久| 波多野结衣喷潮| 亚州国产精品| 精品少妇一区二区三区视频免付费 | 精品一区二三区| 婷婷中文字幕一区| 亚洲欧美国产精品va在线观看| www.国产视频.com| 亚洲电影观看| 亚洲自拍偷拍图区| 日韩三级在线播放| 无码国产精品一区二区色情男同| 狠狠色丁香久久婷婷综| 日韩av免费看| 国产在线精品观看| 在线中文字幕第一区| 一级做a爰片久久毛片美女图片| 91porn在线| 国产激情一区| 欧美乱熟臀69xxxxxx| 欧美精品无码一区二区三区| 国产丝袜在线播放| 亚洲欧美欧美一区二区三区| 日韩在线导航| 户外极限露出调教在线视频| 91色婷婷久久久久合中文| 国产精华一区二区三区| 99精品久久久久久中文字幕 | 青青草精品视频在线观看| 麻豆理论在线观看| 精品久久久久久久久久久| 妺妺窝人体色www看人体| 国产在线观看av| 国产精品国产三级国产aⅴ入口 | 美女高潮视频在线看| 综合久久一区二区三区| 在线视频不卡一区二区三区| 日本高清中文字幕在线| 国产精品乱人伦中文| 老司机精品福利在线观看| 亚洲欧洲精品视频| 久久久精品tv| 日韩欧美第二区在线观看| 欧洲一区av| 久久精品一区四区| 亚洲精品一卡二卡三卡四卡| 99青草视频在线播放视| 亚洲精品视频观看| 精品久久一二三| 99热播精品免费| 日韩欧美国产精品| 蜜桃传媒一区二区亚洲av| 成人女性视频| 欧美精品久久久久久久免费观看 | 亚洲精品社区| 国产精品日韩在线| 午夜免费福利视频| 久久久精品tv| 一本大道东京热无码aⅴ| 中文字幕在线直播| 欧美精品久久久久久久多人混战 | 手机看片福利永久| 国产欧美精品一区aⅴ影院 | 性色一区二区三区| 成人免费淫片视频软件| 色呦呦视频在线| 国产精品久久久久久久久动漫| 国产又粗又猛又爽又黄的网站| 国模套图日韩精品一区二区| 日韩精品一区二区三区中文精品| 欧美特级黄色录像| 黄色亚洲免费| 成人国产精品免费视频| 日本亚洲一区| 尤物视频一区二区| 在线观看免费成人av| 狠狠久久伊人| 欧美精品午夜视频| 中国一级特黄视频| 91免费在线视频观看| 91嫩草国产丨精品入口麻豆| 91另类视频| 精品一区二区三区三区| 久久久久久久蜜桃| 精东粉嫩av免费一区二区三区| 美女三级99| gogo高清在线播放免费| 欧美一级片在线看| 任我爽在线视频| 日韩黄色免费网站| 欧美日韩三区四区| 久草在线视频福利| 欧美一级精品大片| 色欲人妻综合网| 捆绑变态av一区二区三区| 日本一区不卡| 国模套图日韩精品一区二区| 日韩经典一区二区三区| 免费一级特黄特色大片| 国产精品888| 欧美日韩午夜爽爽| 国产高清日韩| 美女999久久久精品视频 | 欧美v亚洲v综合ⅴ国产v| 免费黄色国产视频| 久久国产精品99精品国产| 日韩欧美在线电影| 成人av色网站| 色偷偷综合社区| 中文字幕二区三区| 中文字幕中文在线不卡住| 男女污污的视频| 欧美精品一区二区久久| 国产精品高潮呻吟久久av无限| 韩国三级av在线免费观看| 91精品福利视频| 天天躁日日躁aaaa视频| 日韩黄色片在线观看| 亚洲国产欧美一区二区三区不卡| 成人四虎影院| 久久精品视频免费播放| 99热这里精品| 亚洲午夜在线观看视频在线| 北京富婆泄欲对白| 国产免费成人| 日本一区二区三区免费观看| 欧美影视资讯| 久久精品在线视频| 精品国产亚洲AV| 亚洲v中文字幕| 日韩精品电影一区二区| 麻豆精品一二三| 18视频在线观看娇喘| 99精品在免费线中文字幕网站一区| 久久久久久国产精品三级玉女聊斋| 欧美性猛交 xxxx| 色婷婷综合久久久久中文一区二区| 国产视频三区四区| 国产精品一区专区| 日日摸日日碰夜夜爽无码| 国产99久久| 成人性生交大片免费网站 | 亚洲人线精品午夜| 中文字幕第99页| 天天色综合久久| 色呦呦网站一区| 中国美女黄色一级片| av在线网址观看| 国产精品久久占久久| 国产精品影片在线观看| 超碰免费在线播放| 亚洲国产精品va| 久久久久久无码精品大片| 一区二区中文视频| 性高潮免费视频| 日韩成人一区二区三区在线观看| 日本丰满少妇黄大片在线观看| 中文字幕区一区二区三| 57pao精品| 国产成人午夜| 欧美一区二区三区视频在线观看| 欧美亚韩一区二区三区| 国产精品久久久久久久裸模| 亚洲天堂网站在线| 性高湖久久久久久久久| 亚洲欧美影院| 婷婷综合一区| 成人久久久久爱| 亚洲精品成人图区| 久久人人爽人人爽人人片亚洲| 神马亚洲视频| 日韩一级欧美一级| 国产日韩久久久| 亚洲男人的天堂av| 老头老太做爰xxx视频| 波多野结衣一区二区三区| 五月天av在线播放| 免费欧美在线| 成人免费性视频| 国产精品99在线观看| 欧美精品尤物在线| 丁香5月婷婷久久| 国产精品美女在线| sese综合| 97在线观看视频国产| 福利在线视频网站| 中文字幕亚洲欧美日韩在线不卡| 香蕉久久国产av一区二区| 欧美精品国产精品| 伊人久久中文字幕| 欧美性猛交xxxx富婆| 四虎永久在线精品| 亚洲精品成人精品456| 日本高清不卡免费| 国产精品毛片无遮挡高清| 成人免费网站黄| 成人精品电影在线观看| 亚洲精品一区二区18漫画| 捆绑调教一区二区三区| 9久久婷婷国产综合精品性色| 午夜一级久久| 国产黄视频在线| 国产精品人人爽人人做我的可爱| 免费在线黄网站| 欧美性久久久| 日本成人在线不卡| 亚洲欧美一级二级三级| 成年人三级视频| 久久人人99| 亚洲制服中文| 日韩在线中文| 亚洲不卡1区| 在线看成人短视频| 精品国产一区二区三区日日嗨| 亚洲综合影院| 国产乱码精品一区二区三区卡| 综合激情网...| 粉嫩av免费一区二区三区| 丁香综合av| 欧美福利一区二区三区| 伊人成综合网伊人222| 欧美一区观看| 欧美xxxxx视频| 中文字幕色呦呦| 韩漫成人漫画| 日韩暖暖在线视频| yy6080久久伦理一区二区| 国产男人精品视频| 国产精品中文| 福利视频一区二区三区| 免费成人三级| 日日夜夜精品网站| 91精品在线观看国产| 国产欧美久久久久| 亚洲综合国产| 999精彩视频| 国产精品白丝jk黑袜喷水| 成人做爰www看视频软件| 91美女片黄在线观看| 超薄肉色丝袜一二三| 亚洲精品亚洲人成人网 | 日韩三级电影网| 一区二区三区回区在观看免费视频| 免费黄色在线网站| 国产综合在线看| 欧美日韩精品免费观看视完整| 成人黄色激情网| 欧美激情极品| 宅男噜噜99国产精品观看免费| 国产综合视频| 欧美日韩亚洲一二三| 久久成人久久爱| 亚洲精品乱码久久久久久不卡| 中文字幕一区二区三区在线播放| 久久久香蕉视频| 欧美视频中文字幕| 国产小视频免费观看| 在线播放精品一区二区三区 | 狠狠入ady亚洲精品经典电影| 动漫av免费观看| 国产大片一区二区| 美国一级黄色录像| 五月婷婷激情综合| 国产又粗又黄视频| 亚洲奶大毛多的老太婆| caoporm免费视频在线| 日韩av手机在线看| 99久久免费精品国产72精品九九| 亚洲精品一区二区三区蜜桃久| 精久久久久久| 午夜av中文字幕| 久久久精品tv| www.国产高清| 日韩精品中文字幕一区二区三区 | 2021久久精品国产99国产精品| 国产视频一区二| 香蕉久久免费影视| 久久99伊人| 亚洲一区二区乱码| 亚洲综合一二三区| 国产精品久久久久久久久久久久久久久久久久| 日韩精品www| 国产一线二线在线观看| 91在线直播亚洲| 99国产精品免费视频观看| 久久精品网站视频| 99久久精品国产观看| 久久免费少妇高潮99精品| 欧美精品第1页| 午夜在线视频| 国产精品精品视频一区二区三区| 日韩av午夜| 免费在线观看视频a| 成人一区在线观看| 外国一级黄色片| 欧美一级在线免费| v片在线观看| 亚洲va电影大全| 亚洲综合中文| 蜜桃福利午夜精品一区| 中文字幕欧美激情| 懂色av蜜臀av粉嫩av喷吹| 亚洲天堂av高清| 蜜桃精品在线| 日韩成人av电影在线| 久久久夜夜夜| 亚洲图片另类小说| 91福利精品第一导航| 国产区视频在线| 国产精品综合网站| 777777国产7777777| 色香蕉久久蜜桃| 国产视频福利在线| 国产精品久久久久久超碰| 日韩啪啪电影网| 五月天激情视频在线观看| 国产精品无码永久免费888| 一级黄色大片免费| 日韩有码在线观看| 麻豆视频久久| 日韩伦理在线免费观看| 99免费精品视频| www.com国产| 一级做a爰片久久毛片美女图片| 成人黄色毛片| 伊人久久大香线蕉精品| 国产激情偷乱视频一区二区三区| 黄色一级免费视频| 日韩经典第一页| 成人午夜sm精品久久久久久久| 大桥未久一区二区| 成人午夜碰碰视频| 亚洲成熟少妇视频在线观看| 最新的欧美黄色| 深夜福利一区| 欧美亚洲另类色图| 国产精品毛片无遮挡高清| 亚洲伦理在线观看| 欧美专区在线视频| 999精品视频| 国产大学生视频| 91国偷自产一区二区三区成为亚洲经典 | 久久天天躁狠狠躁夜夜av| 亚洲日本va午夜在线电影| 男人日女人逼逼| 国产精品久久久久影院亚瑟 | 欧美一区二区三区久久久| 最新国产精品拍自在线播放| 亚洲综合网狠久久| 国语对白做受xxxxx在线中国 | 色网站在线播放| 国产亚洲精品91在线| 久久久精品区| 久久美女福利视频| 亚洲天堂网中文字| 五月婷婷免费视频| 国产精品揄拍500视频| 亚洲香蕉网站| 99久久99久久精品免费看小说.| 日韩欧美你懂的| 成人午夜精品| 欧美一级欧美一级| 一区二区中文视频|