程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實驗六 最小代價生成樹,最小代價生成樹

實驗六 最小代價生成樹,最小代價生成樹

編輯:C++入門知識

實驗六 最小代價生成樹,最小代價生成樹


實驗名稱:最小代價生成樹

實驗章節:算法設計與分析第6章

實驗目的: 掌握貪心算法解決問題的思想和一般過程,
           學會使用普裡姆算法解決實際問題。

提交形式: 所有作業的原程序和可執行程序(即cpp文件和exe文件)

           紙質實驗報告(格式和內容請參閱末頁)

實驗內容

完善下列程序,並回答問題。

  1 #include<iostream.h>
  2 
  3 #define G_NODE_NUM 6  //結點個數
  4 
  5 #define INFTY 65535
  6 
  7 template<class T>
  8 
  9 struct ENode
 10 
 11 {//帶權圖的邊結點
 12 
 13        int adjVex;
 14 
 15        T w;
 16 
 17        ENode* nextArc;
 18 
 19 };
 20 
 21 template <class T>
 22 
 23 class Graph
 24 
 25 {
 26 
 27 public:
 28 
 29        Graph (int mSize){
 30 
 31               n = mSize;
 32 
 33               a = new ENode<T> *[mSize];
 34 
 35               for(int i = 0; i< n ;i++){
 36 
 37                      a[i] = NULL;
 38 
 39               }
 40 
 41        }
 42 
 43        void Prim(int s);
 44 
 45        void putin(T X[G_NODE_NUM][G_NODE_NUM]);
 46 
 47        void putout();
 48 
 49 protected:
 50 
 51        void Prim(int k, int* nearest, T* lowcost);
 52 
 53        ENode<T>** a;
 54 
 55        int n; 
 56 
 57 };
 58 
 59  
 60 
 61 template<class T>
 62 
 63 void Graph<T>::putin(T X[G_NODE_NUM][G_NODE_NUM]){
 64 
 65        ENode<T> *e;
 66 
 67        for(int i = 0; i < n; i++){
 68 
 69               for(int j = 0; j < n; j++){
 70 
 71                      if(X[i][j]>0){
 72 
 73                             e = new ENode<T>();
 74 
 75                             e->adjVex = j;
 76 
 77                             e->w = X[i][j];
 78 
 79                             e->nextArc = a[i];
 80 
 81                             a[i] = e;
 82 
 83                      }
 84 
 85               }
 86 
 87        }
 88 
 89 }
 90 
 91 template<class T>
 92 
 93 void Graph<T>::putout(){
 94 
 95        ENode<T> *e;
 96 
 97        cout<<"---圖輸出---"<<endl;
 98 
 99        for(int i=0; i<n; i++){
100 
101               e = a[i];
102 
103               cout<<endl<<"第"<<i<<"個節點:";
104 
105               while(e!=NULL){
106 
107                      cout<<" "<<e->adjVex<<"("<<e->w<<")";
108 
109                      e=e->nextArc;
110 
111               }
112 
113        }
114 
115        cout<<endl;
116 
117 }
118 
119  
120 
121 template<class T>
122 
123 void Graph<T>::Prim(int s)
124 
125 { 
126 
127        學生書寫部分
128 
129 };
130 
131  
132 
133 template<class T>
134 
135 void Graph<T>::Prim(int k, int* nearest, T* lowcost)
136 
137 {
138 
139        學生書寫部分
140 
141 }
142 
143  
144 
145 void main(){
146 
147        Graph<int> *G;
148 
149        int data[G_NODE_NUM][G_NODE_NUM]={   {0,6,1,5,0,0},
150 
151                                                                              {6,0,5,0,3,0},
152 
153                                                                              {1,5,0,5,6,4},
154 
155                                                                              {5,0,5,0,0,2},
156 
157                                                                              {0,3,6,0,0,6},
158 
159                                                                              {0,0,4,2,6,0}};
160 
161        int n = G_NODE_NUM;
162 
163        G = new Graph<int>(n);
164 
165        G->putin(data);
166 
167        G->putout();
168 
169        G->Prim(0);
170 
171 }

 

程序問題

      7.(選作)若是使用克魯斯卡爾算法,課本第109頁圖6-10生成的最小子圖應該是什麼?

      8.(選作)若是使用克魯斯卡爾算法,(圖1)生成的最小子圖應該是什麼?

 

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