prim演算法從找點開始的演算法,對於乙個圖如下:
解釋:dist為每個點到生成樹的最小距離,最開始時候每個點到生成樹的最小距離為inf(無窮大),鄰接矩陣g來儲存圖的邊資料,不相鄰的邊距離為inf,每個點到自己的距離為0,visited陣列來標記每個點是否被訪問了
1、剛開始時,最小生成樹為空,若取頂點1位源點,則把頂點1加入到生成樹中去,設定visited陣列visited[1] = 1,初始化每個點到樹的最小距離,此時生成樹為
2、進入迴圈,更新dist陣列,由於dist[3] = 1,是離樹最近的點所以頂點3加入到樹中,visited[3] =1 ,生成樹:
對於加入樹中的頂點v,找到v的鄰接點,更新dist陣列
3、重複步驟2,找到此時離樹最近的點4,加入到樹中,並每次更新dist陣列
4、直到所有點 都被訪問過了,退出迴圈,列印最小生成樹的長度。若退出迴圈後還有dist[i] = inf,說明還有點到樹的距離為無窮大,說明此圖不為聯通圖,輸出"此圖不聯通"
示例**:
#include#include#define max 101
#define inf 99999999
using namespace std;
int g[max][max];
int visited[max];
int dist[max];
void prim(int s,int n)
while(1)
}if(!done) //所有點都訪問過了 跳出迴圈
else}}
for(i = 1; i <= m; i++)
prim(1,n);
system("pause");
return 0;
}
最小生成樹之prim演算法
最小生成樹的演算法思想和介面介紹過的求單源的最短路徑演算法dijkstra演算法有很多相似地方,甚至很多 都是一樣。prim演算法要解決的主要問題是路徑的最短問題。假設平面上有很多點,各個點之間有很多的線連線起來,並且到達各個點的距離不相同,需要求出一條路徑,使得各個點都能被連線起來,並且他們的距離...
最小生成樹之prim演算法
普利姆演算法 prim algorithm 最小生成樹的概念 所謂最小生成樹,就是在乙個具有n個頂點的帶權連通圖g中,如果存在某個子圖g 其包含了圖g中的所有頂點和一部分邊,且不形成迴路,並且子圖g 的各邊權值之和最小,則稱g 為圖g的最小生成樹。普利姆演算法 prim algorithm 演算法描...
最小生成樹之prim演算法
mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...