普利姆演算法

2021-06-30 16:15:27 字數 960 閱讀 6753

普利姆(prim),這個演算法有什麼用?在實際中這個演算法經常用到電子板的電路連線中,因為可以使用到最少的連線將所有的電子連線起來,又打個比方在鋪設電線將所有使用者連線起來可以使用最少的電線連線起來!知道了這個作用之後你是不是比較感興趣呢?

首先看**:

//prim演算法生成最小生成樹

void minispantree_prim(mgraph g){

int min,i,j,k;

int adjvex[maxvex];//儲存相關頂點的下表

int lowcost[maxvex];//儲存相關頂點間的權值

lowcost[0]=0;//v0 作為最小生成樹的根開始遍歷,權值為0

adjvex[0]=0;//v0 第乙個加入

//初始化操作,根據圖示例g.numvertexes=8步驟一,請看圖2

for(i=0;i步驟二,請看圖3

while(j步驟三:請看圖4

for(j=0;j看完了**是不是有點暈?我們進行**演算法模擬,結合**說明:

圖1:先理解一下各個引數的說明:

圖2:

圖3,並且列印出了 權值10,頂點1,列印出了之後將lowcost[1]的權值=0:

圖4,從圖4可以推出下一次我們列印出的是,權值11,頂點5:

普利姆演算法

演算法思想 可取圖中任意乙個頂點v作為生成樹的根,之後若要往生成樹上新增頂點w,則在頂點v和w之間必定存在一條邊。並且該邊的權值在所有連通頂點v和w之間的邊中取值最小。一般情況下,假設n個頂點分成兩個集合 u 包含已落在生成樹上的結點 和v u 尚未落在生成樹上的頂點 則在所有連通u中頂點和v u中...

普利姆演算法

演算法思想 可取圖中任意乙個頂點v作為生成樹的根,之後若要往生成樹上新增頂點w,則在頂點v和w之間必定存在一條邊。並且該邊的權值在所有連通頂點v和w之間的邊中取值最小。一般情況下,假設n個頂點分成兩個集合 u 包含已落在生成樹上的結點 和v u 尚未落在生成樹上的頂點 則在所有連通u中頂點和v u中...

普利姆演算法

原理 將頂點分為兩個類,其中一類為沒有選中類,另一類為選中類。每次迭代中將權值小的路徑新增到選中類找到最小生成樹。我們從a點開始,首先將a點納入選中類,在從a點向非選中類找最小路徑得到a b這條,此時再將a和b看為乙個整體,向非選中類找最小路徑得到a b c,按照這種流程最終可以得到最後一幅圖,去掉...