普利姆演算法和克魯斯卡爾演算法的JS簡單實現

2021-10-04 19:22:28 字數 3349 閱讀 4887

**實現

var max =

1000000

;var pointset =

;var distance =[[

0,4,

7, max, max],[

4,0,

8,6, max],[

7,8,

0,5, max]

,[max,6,

5,0,

7],[max, max, max,7,

0]];

var a =

newnode

("a");

var b =

newnode

("b");

var c =

newnode

("c");

var d =

newnode

("d");

var e =

newnode

("e");

pointset.

push

(a);

pointset.

push

(b);

pointset.

push

(c);

pointset.

push

(d);

pointset.

push

(e);

function

getindex

(str)

return-1

;}//需要傳入點的集合,邊的集合,當前已經連線進入的集合

// 此方法,根據當前已經有的節點,來進行判斷,獲取到距離最短的點

function

getmindisnode

(pointset, distance, nowpointset)}}

fromnode.neighbor.

push

(mindisnode)

; mindisnode.neighbor.

push

(fromnode)

;return mindisnode;

}function

prim

(pointset, distance, start)}}

prim

(pointset, distance, pointset[2]

);console.

log(pointset)

;

**實現

var max =

1000000

;var pointset =

;var distance =[[

0,4,

7, max, max],[

4,0,

8,6, max],[

7,8,

0,5, max]

,[max,6,

5,0,

7],[max, max, max,7,

0]];

function

node

(value)

var a =

newnode

("a");

var b =

newnode

("b");

var c =

newnode

("c");

var d =

newnode

("d");

var e =

newnode

("e");

pointset.

push

(a);

pointset.

push

(b);

pointset.

push

(c);

pointset.

push

(d);

pointset.

push

(e);

function

canlink

(resultlist, tempbegin, tempend)

if(resultlist[i]

.indexof

(tempend)

>-1

)}//兩個點都是新的點(都不在任何部落裡)——可以連線,產生新的部落

// begin在a部落,end沒有部落 —— a部落擴張乙個村莊

// end在a部落,begin沒有部落 ——a部落擴張乙個村莊

// begin在a部落,end在b部落 ——將ab兩個部落合併

// begin和end在同乙個部落,——不可以連線

if(beginin !=

null

&& endin !=

null

&& beginin == endin)

return

true;}

function

link

(resultlist, tempbegin, tempend)

if(resultlist[i]

.indexof

(tempend)

>-1

)}if(beginin ==

null

&& endin ==

null

)else

if(beginin !=

null

&& endin ==

null

)else

if(beginin ==

null

&& endin !=

null

)else

if(beginin !=

null

&& endin !=

null

&& beginin != endin)

tempbegin.neighbor.

push

(tempend)

; tempend.neighbor.

push

(tempbegin);}

function

kruskal

(pointset, distance)}}

link

(resultlist, begin, end);if

(resultlist.length ==

1&& resultlist[0]

.length == pointset.length)}}

kruskal

(pointset, distance)

;console.

log(pointset)

;

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

給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.2 普里姆演算法 圖的存貯結構採用鄰接矩陣.此方...

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

演算法 給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.2 普里姆演算法 圖的存貯結構採用鄰接矩...

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

給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用邊集陣列,且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間.2 普里姆演算法 圖的存貯結構採用鄰接矩陣.此方...