prim演算法理解:
根據上圖可以列寫出該連通網的鄰接矩陣,為了方便直觀的理解:
權值v0
v1v2
v3v4
v5v006
15ꚙꚙ
v1605
ꚙ3ꚙv2
1507
54v35
ꚙ70ꚙ
2v4ꚙ3
5ꚙ06
v5ꚙꚙ4
260如上圖所示,實際上prim演算法求解最小生成樹的過程就是不斷地尋找已走過頂點的最近頂點的過程(邊權值最小)。
因此如上圖所示,起點在v0點,尋找最近頂點,即v2點;找到v2點後,v2點作為當前頂點,繼續尋找最近頂點,這時和已走過的頂點(v0、v2)直接連通的點共有4個:v1、v3、v4、v5,但是顯然求解最小生成樹不能重複進入已經走過的點,對於這個問題prim演算法採用的方法是將已經走過的點到任何點的權值都設定為0,然後在尋找最短邊時,忽略權值為0點邊。
這樣當我們站在v2點處時,已走過的點到各個點之間的最短權值分別為:
權值v0
v1v2
v3v4
v5v0、v205
0554
以上敘述的內容其實就是prim演算法的核心,即:①尋找最近點;②迭代lowcost陣列。
在實際的演算法實現中,就是通過這樣一步一步迭代lowcost陣列,然後在lowcost陣列中尋找最小的權值,作為目標點,最終實現以最短路徑遍歷連通網。
**及詳細注釋:
void minispantree_prim(mgraph g)
{ int min,i,j,k;
/* 鄰接陣列 儲存每乙個頂點的鄰接點(也就是上乙個走過的點)的下標 */
int adjvex[maxwex];
/* 儲存當前頂點向其他頂點的距離(其中已完成的頂點置零,表示不能再走) */
int lowcost[maxwex];
lowcost[0] = 0;
adjvex[0] = 0;
/* init */
for(i=1;i——cloud over sky
——2020/3/11
最小生成樹Prim演算法理解
mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...
最小生成樹Prim演算法理解
mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...
最小生成樹Prim演算法理解
mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...