資料結構與演算法之普里姆演算法

2021-10-05 04:33:26 字數 685 閱讀 3382

思想:

選取圖中任意乙個頂點,把它看成一棵樹,並在與此樹相接的邊中選取乙個權值最小的邊,並將與這條邊相接的另乙個頂點也納入樹中,得到了一顆有兩個頂點的樹,以此類推,知道訪問完圖中所有的頂點並納入樹中為止;

普里姆演算法構造最小生成樹的過程中:需要構造兩個陣列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...