貪心 Prim演算法 避圈法

2022-02-18 11:03:11 字數 1192 閱讀 2238

prim演算法是圖論中的一種演算法,可在帶權連通圖里搜尋產生最小生成樹。

該演算法於2023年由捷克數學家沃伊捷赫·亞爾尼克(vojtěch jarník)發現;並在2023年由美國計算機科學家羅伯特·普里姆(robert c. prim)獨立發現;2023年,艾茲格·迪科斯徹再次發現了該演算法。

prim演算法從任意乙個頂點開始,每次選擇乙個與當前頂點集最近的乙個頂點,並將兩頂點之間的邊加入到樹中,在找當前最近頂點時使用到了貪心演算法。

預備知識(了解的跳過):

無向圖、鄰接矩陣、

最小生成樹

先給出乙個這樣的鄰接矩陣,找最小生成樹吧:

把鄰接矩陣可以翻譯成這樣的無向圖:

過程:

prim演算法是基於節點做優先考慮的,以某一節點開始作為根節點,不斷搜尋距離的權值最小的節點,然後加入到生成樹中。

#include#define inf 99999

using

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 有鄰接表 用於稀疏矩陣 和鄰接矩陣 用於稠密矩陣 下面我給的例項適合用稀疏矩陣。聽了大概...