最小生成樹之kruskal演算法概念與實現

2021-08-07 23:59:28 字數 702 閱讀 9308

最小生成樹的kruskal演算法非常簡單了,原理和prim演算法差不多,然而kruskal並不是從源點開始層次考察的,而是直接用優先佇列儲存所有邊,通過貪心演算法的思想,用權重最小的邊組成最小生成樹。需要注意的是要通過並查集過濾掉組成環的邊。

/**

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

*@author yuli

* */

public

class

kruskalmst

//初始化並查集,用來判斷加入邊後是否會形成環

fastunionfind uf = new fastunionfind(graph.getv());

//如果隊列為空,或者優先佇列小於圖的頂點-1(邊已經找完了)

while(!queue.isempty() && mst.size() < graph.getv()-1)

//連通這兩個頂點

uf.union(v, w);

mst.add(edge);}}

/*** 獲取最小生成樹

*@return

*/public iterableedges()

/*** 獲取最小生成樹的權重

*@return

*/public

double

weight()

return weight;

}}

最小生成樹之Kruskal演算法

最小生成樹 kruskal演算法描述 該演算法是基於貪心的思想得到的。首先我們把所有的邊按照權值先從小到大排列,接著按照順序選取每條邊,如果這條邊的兩個端點不屬於同一集合,那麼就將它們合併,直到所有的點都屬於同乙個集合為止。合併頂點可以利用並查集,換而言之,kruskal演算法就是基於並查集的貪心演...

最小生成樹之kruskal演算法

先構造乙個只含 n 個頂點 而邊集為空的子圖,把子圖中各個頂點看成各棵樹上的根結點,之後,從網的邊集 e 中選取一條權值最小的邊,若該條邊的兩個頂點分屬不同的樹,則將其加入子圖,即把兩棵樹合成一棵樹,反之,若該條邊的兩個頂點已落在同一棵樹上,則不可取,而應該取下一條權值最小的邊再試之。依次類推,直到...

最小生成樹之kruskal演算法

克魯斯卡爾 kruskal 演算法過程 構造最小生成樹 u,te 1.置u的初值等於v 即包含有g中的全部頂點 te的初值為空集 即圖t中每乙個頂點都構成乙個連通分量 2.將圖g中的邊按權值從小到大的順序依次選取 若選取的邊未使生成樹t形成迴路,則加入te 否則捨棄,直到te中包含 n 1 條邊為止...