思想:
選取圖中任意乙個頂點,把它看成一棵樹,並在與此樹相接的邊中選取乙個權值最小的邊,並將與這條邊相接的另乙個頂點也納入樹中,得到了一顆有兩個頂點的樹,以此類推,知道訪問完圖中所有的頂點並納入樹中為止;
普里姆演算法構造最小生成樹的過程中:需要構造兩個陣列vset[ ]和lowcost[ ] 。vset[ i ] = 1表示頂點 i 已經被納入樹中,vset[ i ] = 0表示頂點 i 還未被納入樹中。lowcost[ ]中存放生成樹到剩餘各頂點最短邊的權值(指的是樹的整體而非某一頂點)。
void
prim
(mgraph g,
int v0,
int&sum)
vset[v0]=1
;//v0併入樹中;
sum =0;
//清零以累計樹的權值;
for(i =
0; i < g.n; i++)}
vset[k]=1
; v = k;
sum +
= min;
//sum記錄最小生成樹的權值;
/*下列迴圈以剛併入的頂點v為媒介更新侯選邊*/
for(j =
0; j < g.n;
++j)
}}
資料結構與演算法 普里姆演算法
應用場景 修路問題的本質就是最小生成樹問題,簡稱mst 給定乙個帶權的無向連通圖,如何選取一顆生成樹,使樹上所有邊上權的總和最小,這叫最小生成樹 n個頂點,一定有n 1條邊 包含全部頂點 普里姆演算法 設g v,e 是連通網,t u,d 是最小生成樹,v,u是頂點集合,e,d是邊的集合 若從頂點u開...
常用資料結構之普里姆演算法
在圖中,尋找一棵最小代價的生成樹尤為重要。現在有普里姆演算法。基於鄰接矩陣來實現。void prim mgraph g,int v0,int sum int lowcost maxsize vset maxsize v int k int min int v v0 for i 0 i 大致思路解析 ...
普里姆演算法
include include include include using namespace std define max name 5 define max vertex num 20 權的上限值 typedef char vertex max name 頂點名字串 typedef int ad...