最小生成樹 prim 演算法

2021-05-25 03:10:55 字數 609 閱讀 2422

一、演算法描述:

假設存在連通帶權圖g (v,e),其中最小生成樹為t,首先從圖中隨意選擇一點s屬於v作為起始點,並將其標記後加入集合u 中。然後演算法重複執行操作為在所有v屬於u,u屬於v-u的邊(v0,u0)屬於e中找一條代價最小的邊並加入集合t,同時將u0併入u,直到u=v為止。這是,t中必有n-1條邊,t就是g的最小生成樹。

二、演算法

void prim(graph g,int v)

;int min=infinity;

int sum=0;

//每次找到最小邊的兩個頂點存放

int v1,v2;

visited[v]=1;

//從起始點v開始要經過找到n-1條邊連通其於的頂點

for(int i=1;i

//找到權值最小的邊,並記錄邊的兩個頂點,將最小權值賦給min

for(int t=0;tg.gr[t][s])

//輸出最小邊和權值  

cout<"<

sum=sum+min;

//標記找到最小邊的兩個頂點 

visited[v1]=visited[v2]=1;

min=infinity;

}cout<

最小生成樹(prim演算法)

最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...

最小生成樹 Prim演算法

prim 演算法 以領接矩陣儲存 圖g bool b i 表示頂點i是否被訪問,初始化時候memset b,false,sizeof b b 0 value,表示從第0個節點開始。用value i 表示節點i到最小生成樹a中定點的最小距離。例如value 1 a 0 1 int sum記錄權值和 i...

最小生成樹Prim演算法

prim演算法的執行非常類似於尋找圖的最短通路的dijkstra演算法。prim演算法的特點是集合a中的邊總是只形成單棵樹。如圖5所示,陰影覆蓋的邊屬於正在生成的樹,樹中的結點為黑色。在演算法的每一步,樹中的結點確定了圖的乙個割,並且通過該割的輕邊被加進樹中。樹從任意根結點r開始形成並逐漸生長直至該...