程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 六講貫通C++圖的應用之六 活動網絡(AOV、AOE)(1)

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

編輯:C++入門知識

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

活動網絡(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;};  


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved