標籤(空格分隔): 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...