演算法思想:
首先置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.最優子結構性質 問題的最優解包含了子問題的最優解。貪心演算法的基本思想 找出整體當中每個小的區域性的最優解,並且將所有的這...