prim演算法是建立在貪心演算法的基礎上的演算法,主要思想就是每次都去找已訪問的頂點連向未訪問的頂點中最短的邊。
演算法思路:
1.u集合存放所有最短邊的起始點,lowcost存放待選邊(每次選擇最小邊都從lowcost中選出);
2.初始先將u的值都設定為入口點start,將lowcost的待選邊都設定為入口點start的相鄰邊;
3.從lowcost選出一條沒有訪問過的最短邊,並得到它的終點;
4.將終點的相鄰邊與lowcost做對比,儲存更短的邊,並更新起點集合u;
5.重複執行3,4步驟,知道找完所有邊生成最小樹。
static int prim(int[,] adjmatrix, int start)
lowcost[start] = -1; //值為0和-1的待選邊不考慮(不考慮已用過的邊和無法到達的邊)
for (int i = 0; i < lenth; i++)
}//若找到了一條最小邊
if (k != -1)
.從到,距離為", i, u[k], k, min);
lowcost[k] = -1; //將已使用的邊排除
sum += min; //累加權值
//遍歷頂點k(新加入的點)的相鄰邊,若有更小的就去更新待選邊(這樣能保證每次選擇的邊是最小邊)
for (int j = 0; j < lenth; j++)}}
}return sum;
}
資料結構 最小生成樹(Prim演算法)
演算法思想 假設n p,是連通圖,te是n上最小生成樹中邊的集合。演算法從u u0 v 開始。重複執行下述操作 在所有u u,v v u的邊 u,v e中找一條代價最小的邊 u0,v0 併入集合te,同時v0併入u,直到u v為止。此時te中必有n 1條邊,則t v,為n的最小生成樹。define ...
資料結構 Prim演算法 最小生成樹
資料結構上機要求用prim演算法求最小生成樹。首先應該明白prim演算法思想,即在乙個網狀圖n v,中,假設m是圖n最小生成樹邊的集合。再設有u和v兩個點集合,從u u0 v m 開始,進入迴圈操作 找出從點集u到點集v u代價最小的邊 u0,v0 u0 u,v0 v u.並把邊併入邊集m中,v0也...
資料結構 prim演算法 最小生成樹
乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。選擇乙個點作為起點 判斷連線每個節點的度 選擇最小的 每進乙個節點 標記已經來過 如果乙個節點所連線的節點都走過了 那麼就退一步 繼續尋找連線邊 選擇最小的 include defin...