普里姆演算法思想:(資料結構書)
從連通網路 n = 中的某一頂點 u0 出發,選擇與它關聯的具有最小權值的邊(u0, v),將其頂點加入到生成樹的頂點集合u中。
以後每一步從乙個頂點在u中,而另乙個頂點不在u中的各條邊中選擇權值最小的邊(u, v),把該邊加入到生成樹的邊集te中,把它的頂點加入到集合u中。
如此重複執行,直到網路中的所有頂點都加入到生成樹頂點集合u中為止
也就是:
1.清空生成樹,任取乙個頂點加入生成樹
2.在那些乙個端點在生成樹里,另乙個端點不在生成樹里的邊中,選取一條權最小的邊,將它和另乙個端點加進生成樹
3.重複步驟2,直到所有的頂點都進入了生成樹為止,此時的生成樹就是最小生成樹
**實現:
c++ code 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include
#define inf
10000
using
namespace std;
const
int n =
6;bool visit[n];
int dist[n] = ;
///表示各個點與生成樹的最短路徑
int graph[n][n] = ,
///inf代表兩點之間不可達
,,
,
,
};
int prim(
int cur)
}
visit[index] =
true;
cout << index <<
" ";
sum += minor;
for(
int j =
0; j < n; j++)
}
}
cout << endl;
return sum;
///返回最小生成樹的總路徑值
}
int main()
最小生成樹(普里姆演算法)
關於什麼是prim 普里姆演算法 在實際生活中,我們常常碰到類似這種一類問題 如果要在n個城市之間建立通訊聯絡網,則連通n個城市僅僅須要n 1條線路。這時。我們須要考慮這樣乙個問題。怎樣在最節省經費前提 下建立這個通訊網.換句話說,我們須要在這n個城市中找出乙個包括全部城市的連通子圖,使得 其全部邊...
最小生成樹 普里姆演算法
普利姆演算法 最小生成樹 把所有頂點分為 2 個集合 乙個表示已經選中的頂點集合 另乙個表示未選中的頂點集合 例如 a,b,c,d,e 五個頂點 1.任意選擇乙個頂點 放在 已經選中的頂點集合中 假如 選a 2.將a 與未選中頂點集合中 選擇 一頂點 條件 權值最小的乙個頂點 如何權值相同 則任意選...
最小生成樹 普里姆演算法
當我們要求解n個連線城市之間的路線問題,就需要我們進行乙個計算。而在連通網上面,我們稱這類問題為最小代價生成樹 最小生成樹 問題。今天我們主要討論的是用普里姆演算法實現最小生成樹。如圖所示,a圖是乙個有權值的連通圖。要對其進行最小生成樹求解,假設初始點為v1,尋找與1有關係而且權值最小的頂點 圖源嚴...