實驗名稱:最小代價生成樹
實驗章節:算法設計與分析第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)生成的最小子圖應該是什麼?