貪心演算法之prim演算法

2021-06-29 16:41:29 字數 587 閱讀 7718

演算法思想:

首先置s=,然後只要s是v的真子集,就做如下的貪心選擇:選擇滿足條件i屬於s,j屬於v-s,且edge[i][j]是最小的邊,就將其頂點j新增到s中,這個過程一直進行到s=v時為止,在這個過程中,選取到的所有邊恰好構成g的一顆最小生成樹。

#include#define infinity 5000

typedef char vertextype;

typedef int edgetype;

#define max 100//定義陣列大小

typedef struct

adjmatrix;

//建立圖的鄰接矩陣

adjmatrix creatgraph_matrix()

setbuf(stdin,null);

for(i=1;i<=g.vexnum;i++)

for(j=1;j<=g.vexnum;j++)

g.edges[i][j]=infinity;

for(k=1;k<=g.arcnum;k++)

return g;

}void prim(adjmatrix g)

for(int j=1;j

貪心演算法之Prim最小生成樹

滿足貪心演算法的條件是都滿足動態規劃的,只是貪心演算法的條件更強,不僅前乙個步驟的解可以用到後一步,而且前一步的解是子問題的最優解,最後能夠得到全域性的最優解。prim演算法是乙個求最小生成樹的演算法。表示圖g 有鄰接表 用於稀疏矩陣 和鄰接矩陣 用於稠密矩陣 下面我給的例項適合用稀疏矩陣。聽了大概...

貪心演算法 最小生成樹 Prim演算法

乙個無向帶權圖g v,e 其中n個頂點vertex,以及連線各個頂點之間的邊edge,可能有些頂點之間沒有邊,每條邊上的權值都是非負值。生成樹 g的乙個子圖,包含了所有的vertex,和部分的edge。最小生成樹 所有的生成樹中,各條edge上的權值總和最小的乙個。例子 設計通訊網路時,各個城市之間...

ACM演算法之貪心演算法

acm演算法之貪心演算法 一般使用貪心演算法要滿足兩個條件 a.貪心選擇性質 可通過做區域性最優 貪心 選擇來達到全域性最優解。貪心選擇性質 這是貪心演算法與動態規劃的區別 b.最優子結構性質 問題的最優解包含了子問題的最優解。貪心演算法的基本思想 找出整體當中每個小的區域性的最優解,並且將所有的這...