最小生成樹Prim演算法Kruskal演算法

2022-04-29 03:39:16 字數 1090 閱讀 6730

prim演算法採用與dijkstra、bellamn-ford演算法一樣的「藍白點」思想;白點代表已經進入最小生成樹的點,藍點代表未進入最小生成樹的點。

演算法分析 & 思想講解:

prim演算法每次都將乙個藍點 u 變成白點,並且此藍點 u 與白點相連的最小邊權還是當前所有藍點中最小的。這樣就相當於向生成樹中新增了n-1次最小的邊,最後得到的一定是最小生成樹。

我們通過對下圖最小生成樹的求解模擬來理解上面的思想。藍點和虛線代表未進入最小生成樹的點、邊;白點和實線代表已進入最小生成樹的點、邊。

#include#include

#include

#include

using

namespace

std;

int s[1500][1500],n,distan[1500

];bool visit[1500

];const

int maxn=0x7fffffff

;int

main()

}int ans=0

;

for(int i=1;i<=n;++i)

ans+=distan[i];

cout

}

#include#include

#include

#include

using

namespace

std;

struct

node

s[1500

];int sum=1,n,fa[1500

];bool

cmp(node a,node b)

int find(int

son)

intmain()

sort(s+1,s+sum,cmp);

int k=0

;

for(int i=1;i<=n;++i)

if(k==n-1

)

break

; }

cout

}

最小生成樹(prim演算法)

最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...

最小生成樹 Prim演算法

prim 演算法 以領接矩陣儲存 圖g bool b i 表示頂點i是否被訪問,初始化時候memset b,false,sizeof b b 0 value,表示從第0個節點開始。用value i 表示節點i到最小生成樹a中定點的最小距離。例如value 1 a 0 1 int sum記錄權值和 i...

最小生成樹 prim 演算法

一 演算法描述 假設存在連通帶權圖g v,e 其中最小生成樹為t,首先從圖中隨意選擇一點s屬於v作為起始點,並將其標記後加入集合u 中。然後演算法重複執行操作為在所有v屬於u,u屬於v u的邊 v0,u0 屬於e中找一條代價最小的邊並加入集合t,同時將u0併入u,直到u v為止。這是,t中必有n 1...