Prim演算法最小生成樹c 實現

2021-08-01 06:47:50 字數 1634 閱讀 7355

標籤(空格分隔): prim 演算法 c++

對於給定的帶權圖g,為了使得生成樹t的權w(t)最小,我們可以使用貪心演算法。

1.選擇乙個初始點v1

; 2.為了使得生成樹的權極小化,選擇v1

的最小權鄰點,並將其連線到v1

; 3.選擇的最小權鄰點,如v3

,將其連線

4.重複以上步驟,直到所以點都連在一起,得到生成樹

#include 

#include

#include

#include

using

namespace

std;

typedef

float weight;

typedef

int vertex;

typedef pairedge;

typedef

vector

edges;

typedef

mapbool> vertices;

typedef

vector

> graphmatrix;

typedef

vector

> labels;

float inf = numeric_limits::max();

//求v的最小權鄰點

vertex nearest_neighbour(vertices& vertices, labels& label)

} return u;

}pairprim(graphmatrix& g, vertex s)

} return make_pair(e, w);

}int main()

} pairmst = prim(graph, 0);

cout

<< "the weight of mst is: "

<< mst.second << endl;

int n = mst.first.size();

cout

<< "the edges of mst are: "

<< endl;

for (int i = 0; i < n; i++)

cout

<< "("

<< mst.first[i].first << ", "

<< mst.first[i].second << ")"

<< endl;

return

0;}

( 其中0代表兩點不連通 )

8 0 3 2 0 0 0 0 0

3 0 3 6 0 0 0 0

2 3 0 0 5 5 0 0

0 6 0 0 2 0 0 2

0 0 5 2 0 4 3 0

0 0 5 0 4 0 4 0

0 0 0 0 3 4 0 6

0 0 0 2 0 0 6 0

the weight of mst is: 21

the edges of mst are:

(2, 0)

(1, 0)

(4, 2)

(3, 4)

(7, 3)

(6, 4)

(5, 4)

最小生成樹prim演算法實現

今天從志權師兄那裡學會了最小生成樹。所謂生成樹,就是n個點之間連成n 1條邊的圖形。而最小生成樹,就是權值 兩點間直線的值 之和的最小值。首先,要用二維陣列記錄點和權值。如上圖所示無向圖 int map 7 7 map 1 2 map 2 1 4 map 1 3 map 3 1 2 然後再求最小生成...

最小生成樹prim演算法實現

最小生成樹prim演算法實現 首先,要用二維陣列記錄點和權值。如上圖所示無向圖 int map 7 7 map 1 2 map 2 1 4 map 1 3 map 3 1 2 然後再求最小生成樹。具體方法是 1.先選取乙個點作起始點,然後選擇它鄰近的權值最小的點 如果有多個與其相連的相同最小權值的點...

最小生成樹prim演算法C

以前也寫過,這次看 決定寫一下.總不寫東西的話,腦袋就笨笨了.用到的東西都在前面的圖實現裡.要說啊,不久之後,用stl dll寫出來,呵呵.加油吧.graph.cpp 2011 08 28 21.20 include stdafx.h include graphrepresentasadjacent...