prim演算法是圖論中的一種演算法,可在帶權連通圖里搜尋產生最小生成樹。
該演算法於2023年由捷克數學家沃伊捷赫·亞爾尼克(vojtěch jarník)發現;並在2023年由美國計算機科學家羅伯特·普里姆(robert c. prim)獨立發現;2023年,艾茲格·迪科斯徹再次發現了該演算法。
prim演算法從任意乙個頂點開始,每次選擇乙個與當前頂點集最近的乙個頂點,並將兩頂點之間的邊加入到樹中,在找當前最近頂點時使用到了貪心演算法。
預備知識(了解的跳過):先給出乙個這樣的鄰接矩陣,找最小生成樹吧:無向圖、鄰接矩陣、
最小生成樹
把鄰接矩陣可以翻譯成這樣的無向圖:
過程:
prim演算法是基於節點做優先考慮的,以某一節點開始作為根節點,不斷搜尋距離的權值最小的節點,然後加入到生成樹中。
#include#define inf 99999using
namespace
std;
const
int n = 6
;bool
visit[n];
int dist[n] = ;
int graph[n][n] = , //
inf代表兩點之間不可達,,
,,};int prim(int
cur)
}visit[index] = true
; cout
<< index << "";
sum +=minor;
for(j = 0; j < n; j++)}}
cout
<
return sum; //
返回最小生成樹的總路徑值
}int
main()
貪心演算法之prim演算法
演算法思想 首先置s 然後只要s是v的真子集,就做如下的貪心選擇 選擇滿足條件i屬於s,j屬於v s,且edge i j 是最小的邊,就將其頂點j新增到s中,這個過程一直進行到s v時為止,在這個過程中,選取到的所有邊恰好構成g的一顆最小生成樹。include define infinity 500...
貪心演算法 最小生成樹 Prim演算法
乙個無向帶權圖g v,e 其中n個頂點vertex,以及連線各個頂點之間的邊edge,可能有些頂點之間沒有邊,每條邊上的權值都是非負值。生成樹 g的乙個子圖,包含了所有的vertex,和部分的edge。最小生成樹 所有的生成樹中,各條edge上的權值總和最小的乙個。例子 設計通訊網路時,各個城市之間...
貪心演算法之Prim最小生成樹
滿足貪心演算法的條件是都滿足動態規劃的,只是貪心演算法的條件更強,不僅前乙個步驟的解可以用到後一步,而且前一步的解是子問題的最優解,最後能夠得到全域性的最優解。prim演算法是乙個求最小生成樹的演算法。表示圖g 有鄰接表 用於稀疏矩陣 和鄰接矩陣 用於稠密矩陣 下面我給的例項適合用稀疏矩陣。聽了大概...