最小生成樹樹 普里姆演算法

2021-08-04 18:23:33 字數 1915 閱讀 5236

普里姆演算法思想:(資料結構書)

從連通網路 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有關係而且權值最小的頂點 圖源嚴...