最小生成樹

2021-07-11 07:01:56 字數 1203 閱讀 7904

在含有n個頂點的連通加權無向圖中選擇n-1條邊,構成一棵極小連通子圖,並使該連通子圖中n-1條邊上權值之和達到最小,則稱其為連通網的最小生成樹。

從單一頂點開始,普里姆演算法按照以下步驟逐步擴大樹中所含頂點的數目,直到遍及連通圖的所有頂點。

具體流程如下圖所示:

反證法:如果這條邊不在最小生成樹中,它連線的兩個連通分量最終還是要連起來的,通過其他的連法,那麼另一種連法與這條邊一定構成了環,而環中一定有一條權值大於這條邊的邊,用這條邊將其替換掉,圖仍舊保持連通,但總權值減小了。也就是說,如果不選取這條邊,最後構成的生成樹的總權值一定不會是最小的。

/**

*@description 最小生成樹之克魯斯卡爾(kruskal)演算法

* 輸入 --> 無向有權圖

* 輸出 --> 列印最小生成樹邊及其對應的權重

*@author gongchuangsu

*@since 2016.04.13

*@version v1.0

*/public

class

kruskal

// 迴圈每一條邊

int index = 0;

for(int i = 0; i < elen; i++)

}// 列印結果

print();

}/**

* 功能:邊集結構體

*/private

static

class

edge

}/**

* 功能:獲取圖中所有的邊

*/private edge getedges()

return edges;

}/**

* 功能:將邊按照權值大小由小到大進行排序

*/private

void

sortedges(edge edges)

}/**

* 功能:查詢頂點在該最小樹中的終點下標

*/private

intgetend(int parent, int i)

/*** 功能:列印結果

*/private

void

print()

}

由演算法**中的迴圈巢狀可得知其演算法時間複雜度為o(

elog

2e),其中

e 為圖中的邊數。

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...

最小生成樹

define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...