克魯斯卡爾演算法生成最小生成樹

2021-10-03 17:36:28 字數 2201 閱讀 4905

以c為起點為例:

1)找到最短的邊

2)判斷是否可以連通: 兩個點出自不同的通區域

3)重複第二步

最後將所有點都(直接或者間接)連通成功

上面就是克魯斯卡爾演算法的基本思路。如何用**實現呢,往下看。

public

class

mapnode

}

//克魯斯卡爾演算法

public

static

void

kruskal

(set

pointset,

int[

] distance)

}

//找到最短的邊並且將兩點按條件連線起來

public

static

void

getmindis

(set

pointset,

int[

] distance,list

> rs)}}

}//迴圈完後便可找到最短的那天邊

begin.neighbor.

add(end)

; end.neighbor.

add(begin);if

(beginlist == null && endlist == null)

else

if(beginlist != null && endlist == null)

else

if(beginlist == null && endlist != null)

else

if(beginlist != null && endlist != null)

}

//根據索引找到相應的點

public

static mapnode getmapnodebyinx

(set

pointset,

int index)

//找到點所在連通區域

public

static list

getmapnodelist

(list

> rs, mapnode node)

public

class

main,,

,,,,

};set

pointset =

newhashset

<

>()

; pointset.

add(pointa)

; pointset.

add(pointb)

; pointset.

add(pointc)

; pointset.

add(pointd)

; pointset.

add(pointe)

; pointset.

add(pointf)

; pointset.

add(pointg)

;kruskal

(pointset,distance)

; system.out.

println

("生成完畢");

//debug檢視結果

}

最小生成樹 克魯斯卡爾演算法

c node.h檔案 儲存頂點資訊 class c node c node c node c node p node c node c node c node c node char p data node.h檔案,儲存邊資訊 include class link node link node li...

最小生成樹( 克魯斯卡爾演算法)

name author date 01 12 14 20 17 description 最小生成樹 克魯斯卡爾演算法 關於並查集的演算法,參見 一種簡單而有趣的資料結構 並查集 include include define maxn 1000 最大頂點數量 define max 20000 最大邊數...

最小生成樹 克魯斯卡爾演算法

之前學了用普里姆演算法來求最小生成樹的權值和,但是它的時間複雜度為o v2 使用優先順序佇列優化後,可以優化為o e log v 克魯斯卡爾演算法可以在o e log e 的時間複雜度內,求出最小生成樹 克魯斯卡爾演算法的核心就是對邊進行公升序排序,然後從權值最小的邊開始,加入最小生成樹中,然後利用...