最小生成樹 Prim演算法

2021-06-19 02:44:12 字數 952 閱讀 6213

演算法**:

status primminispantree(mgraph g,int v)//v為生成樹的第乙個頂點由使用者指定

//lowcost[v] = 0;表示加入到了生成樹中了,但是我覺得在初始化中已經被置為0了所以覺得這個沒多大用

//也許是增加可讀性吧

for(i = 0; i < g.vexnums; i++)

}//將找到的最小的權值鄰接的下標的lowcost加入最小生成樹

lowcost[k] = 0;

//對新入的頂點的處理,此處就列印就行了

printf("%d",k);

//對lowcost陣列進行調整,這個迴圈不做注釋,在最後再說

for(j = 0; j < g.vexnums; j++)

}}}

由於對lowcost陣列的調整個人覺得是prim演算法中的主要思想,所以拿到最後來詳細總結。

prim的主要演算法就是從乙個頂點出發,第一步把所有與這個頂點鄰接的權值加入lowcost陣列

再從lowcost陣列裡面找出最小的乙個來,把這條邊連線的頂點加入生成樹,同時保持lowcost陣列不變

用新加入的點遍歷所有未加入生成樹的點(if語句中的lowcost[j]!=0的作用),如果有小於之前lowcost陣列的值

就把lowcost對應下標的值改為與這個點鄰接的權值,並把最小值鄰接的下標改為新加入的點。

大概思想感覺有貪心法有一點相似,就是要從當前所有的生成樹的頂點鄰接的頂點的邊裡面選出最小的乙個邊

並把這個邊的頂點加入生成樹,再從這個點擴散。簡單的說就是加入乙個頂點的過程要經過把以前的lowcost陣列

的值和最新加入的頂點所鄰接的頂點的權值中選出鄰接到相同頂點中權值比較小的存入lowcost陣列中。然後遍歷

lowcost陣列選出最小的權值的下標加入生成樹再進行上一步。演算法中的adjvex陣列實際沒多大的作用。

最小生成樹(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 演算法

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