以此圖為例,假設從0開始生成,那麼第一條權值最小的邊就是(0,5)所以第一次的結果如下:
2. 接下來參考(0,5)這個整體(標紅)權值最小的為(0,1)故第二次將(0,1)進行連線,以此類推。
最終結果為:
我們需要建立兩個陣列,vset——標識當前結點是否被併入到樹中,lowcost——存放當前生成樹到剩餘各頂點的最短邊的權值。
演算法的流程
①將初始點v到其他頂點的所有邊當作和候選邊
②重複一下步驟
a)從候選邊中選出權值最小的邊輸出,和該邊的終點一起放入樹中(vset置1)
b)檢查所有剩餘結點vi,如果(v,vi)的權值比lowcost[vi]小, 更新lowcost.
void prim(mgraph g,int v0,int &sum)
vset[v0]=1; //v0入樹
sum = 0; //用來累計樹的權值
for(i=0;i
vset[k] = 1; //當前最小權值入樹
v=k;
sum+=min;
for(j=0;j
if(vset[j]==0&&g.edge[v][j]
lowcost[j]=g.edges[v]
} }}
最小生成樹之普里姆演算法
什麼是最小生成樹?定義 給定乙個帶權無向連通圖,從指定結點出發能夠連線所有結點並且權值總和最小的樹叫最小生成樹,也叫權重最小樹。那麼普里姆演算法是怎麼構造最小生成樹的?首先將指定的結點加到到頂點集合v中,由集合內和集合外構成的所有邊當中選取權值最小的邊,將其對應的集合外的點加入到集合中,重複此操作,...
最小生成樹(普里姆演算法)
關於什麼是prim 普里姆演算法 在實際生活中,我們常常碰到類似這種一類問題 如果要在n個城市之間建立通訊聯絡網,則連通n個城市僅僅須要n 1條線路。這時。我們須要考慮這樣乙個問題。怎樣在最節省經費前提 下建立這個通訊網.換句話說,我們須要在這n個城市中找出乙個包括全部城市的連通子圖,使得 其全部邊...
最小生成樹 普里姆演算法
普利姆演算法 最小生成樹 把所有頂點分為 2 個集合 乙個表示已經選中的頂點集合 另乙個表示未選中的頂點集合 例如 a,b,c,d,e 五個頂點 1.任意選擇乙個頂點 放在 已經選中的頂點集合中 假如 選a 2.將a 與未選中頂點集合中 選擇 一頂點 條件 權值最小的乙個頂點 如何權值相同 則任意選...