最小生成樹兩種解法

2021-10-08 17:59:08 字數 769 閱讀 2627

運用了貪心的演算法。是從某個頂點開始不斷新增邊的演算法。

int cost[max_v]

[max_v]

;//存邊權

int mincost[max_v]

;//從集合x出發的邊到每個頂點的最小權值

int book[max_v]

;int v;

intprim()

mincost[0]

=0;int res=0;

while(1

)if(v==-1

)break

; book[v]=1

;//將v加入集合

res+

=mincost[v]

;//根據當前點更新到其餘點的距離

for(

int i=

0;i}

kruskal先將邊按從小到大排序,如果不產生圈或重邊,就加入新的邊。

如何判斷不產生圈,則是將連線uv的邊加入集合時,先判斷uv是否在乙個聯通分量裡,若不在,才能將這條邊加入。

判斷方法採用並查集。

struct edge

;bool

cmp(

const edge &a,

const edge &b)

edge es[max_e];

int v,e;

intkruskal()

}return res;

}

上述兩種演算法優化後的複雜度大體相差不大。

最小生成樹(兩種演算法)

ifndef min tree h define min tree h include include include include include data struct data struct.h include tool tool disjoint set.h 最小生成樹 假設圖中的頂點有n...

最小生成樹的兩種實現

kruskal演算法的實現 根據最一般的kruskal 演算法的實現原理,本人設計並實現的演算法如下 首先在此演算法中,選邊的過程中,要首先對存在邊按權值按非遞減的順序排列,以順序判斷並加入最小生成樹邊的集合。因此設計資料結構 typedef struct myedge,eptr 在此資料結構中,a...

最小生成樹 兩種常見的寫法

普利姆最小生成樹演算法 普里姆演算法 prim演算法 圖論中的一種演算法,可在加權連通圖里搜尋 最小生成樹 意即由此演算法搜尋到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點 英語 vertex graph theory 且其所有邊的權值之和亦為最小。1 輸入 乙個加權連通圖,其中頂點集合為v,...