prim是尋找最小生成樹的演算法,本文利用鄰接矩陣,乙個比較方便的方式來進行prim演算法。
鄰接矩陣是儲存有向或無向圖的方式,若不帶權,一般用 0 或 inf 表示未連線,用 1 表示連線。
如果帶權,可以用乙個矩陣來表示,-1是未連線,若連線,則數值等於權值;也可以用兩個矩陣分別表示連線情況和權值。
本文使用乙個矩陣,實現帶權無向圖的prim演算法。
#define inf 9999999
//m是無向圖頂點個數,matrix是無向圖的鄰接矩陣
void
prim_tree
(double
** matrix,
int m)
printf
("\n輸入成功!\n");
/*開始記錄和計算*/
t[index]
= start -1;
while
(index < m-1)
}}t[index +1]
= y;
/*輸出連線點*/
printf
("\n連線 %d %d 權值 %0.3lf \n"
, x +
1, y +
1, min)
;/*將已經連線的設為-1,防止重新計算或者形成迴路*/
for(i =
0; i <= index; i++
) index++;}
}
prim演算法 鄰接矩陣 鄰接表版
prim演算法和dijkstra演算法差不多,只不過前者每次併入乙個離當前集合最近的點,乙個併入離原點最近的點 前提都是vis u false prim演算法從哪個點開始都可以,所以不需要引數,這裡預設起點是0 返回生成樹權值之和。const int maxn 500 10 const int in...
鄰接矩陣實現
缺點 created by carso on 2020 3 14.ifndef c grapmatrix h define c grapmatrix h include include include 定義頂點 templatestruct vertex 定義邊 templatestruct edg...
最小生成樹Prim演算法(鄰接矩陣和鄰接表)
最小生成樹,普利姆演算法 簡述演算法 先初始化一棵只有乙個頂點的樹,以這一頂點開始,找到它的最小權值,將這條邊上的令乙個頂點新增到樹中 再從這棵樹中的所有頂點中找到乙個最小權值 而且權值的另一頂點不屬於這棵樹 重複上一步 直到所有頂點併入樹中 圖示 注 以a點開始,最小權值為 另一頂點是 將 加入到...