資料結構 最小生成樹

2021-08-01 08:45:37 字數 1562 閱讀 1928

生成樹:乙個連通圖的最小連通子圖稱作該圖的生成樹。有n個結點的連通圖的生成樹有n個結點和n-1條邊。

乙個有n個結點的連通圖的生成樹是原圖的極小連通子圖,它包含原圖中的所有n個結點,並且有保持圖連通的最少的邊。

由生成樹的定義可知:

①若在生成樹中刪除一條邊,就會使該生成樹因變成非連通圖而不再滿足生成樹的定義;

②若在生成樹中增加一條邊,就會使該生成樹因存在迴路而不再滿足生成樹的定義;

③乙個連通圖的生成樹可能有許多。

總結:從生成樹的定義顯然可以證明,對於有n個結點的無向連通圖,無論它的生成樹的形狀如何,一定有且只有n-1條邊。

如果無向連通圖是乙個帶權圖,那麼它的所有生成樹中必有一棵樹的權值總和最小的生成樹,這棵生成樹稱為最小代價生成樹,簡稱最小生成樹

從最小生成樹的定義可知,構造有n個結點的無向連通帶權圖的最小生成樹,必須滿足以下三個條件:

①構造的最小生成樹必須包括n個結點;

②構造的最小生成樹中有且只有n-1條邊;

③構造的最小生成樹中不存在迴路。

構造最小生成樹的方法有許多種,典型的構造方法有兩種,一種稱作普利姆(prim)演算法,另一種稱作克魯斯卡爾(kruskal)演算法。

假設g=(v,e)為乙個帶權圖,其中v為帶權圖中結點的集合,e為帶權圖中邊的權值集合。設定兩個新的集合u和t,其中u用於存放帶權圖g的最小生成樹的結點的集合,t用於存放圖g的最小生成樹的邊的集合。

普利姆演算法的思想是:令集合u的初值為u=(即假設構造最小生成樹時從結點u0開始),集合t的初值為t={}。從所有結點u∈u和結點v∈v-u的帶權邊中算出具有最小權值的邊(u,v),將結點v加入集合u中,將邊(u,v)加入集合t中。如此不斷重複,當u=v時則最小生成樹構造完畢。此時集合u中存放著最小生成樹結點的集合,集合t中存放著最小生成樹邊的權值集合。具體的構造過程如下圖所示。

不同於普利姆演算法,克魯斯卡爾演算法是一種按照帶權圖中邊的權值的遞增順序構造最小生成樹的方法。

克魯斯卡爾演算法是:設無向連通帶權圖g=(v,e),其中v為結點的集合,e為邊的集合。設帶權圖g的最小生成樹t由結點集合和邊的集合構成,其初值為t=(v,{}),即初始時最小生成樹t只由帶權圖g中的結點集合組成,各結點之間沒有一條邊。這樣,最小生成樹t中的各個結點各自構成乙個連通分量。然後,按照邊的權值遞增的順序考察帶權圖g中的邊集合e中的各條邊。若被考察的邊的兩個結點屬於t的兩個不同的連通分量,則將此邊加入到最小生成樹t,同時把兩個連通分量連線為乙個連通分量;若被考察的邊的兩個結點屬於t的同乙個連通分量,則將此邊捨去。如此下去,當t中的連通分量個數為1時,t中的該連通分量即為帶權圖g的一棵最小生成樹。

資料結構(最小生成樹)

對於乙個無相連通網,他的所有生成樹中必有一棵邊的權值總和最小的生成樹,稱之為最小代價生成樹,簡稱最小生成樹。最小生成樹必須滿足三個條件 1 構造的最小生成樹必須包括n個頂點 2 構造的最小生成樹有且僅有n 1條邊 3 構造的最小生成樹中不存在迴路。普利姆演算法 prim 假設g v,e 為一無向連通...

資料結構 最小生成樹

對於乙個圖連通圖g,n個點,e條邊,最小生成樹就是n 1條邊圖的生成子圖,且這n 1條邊的權值和最小。對於乙個圖的兩種演算法 prim演算法和kruskal演算法,這兩種演算法都是基於貪心思想的。偽 實現 輔助變數 lowcost陣列,儲存當前可連通的其他節點的最小權值。cnt 0表示當前樹連線節點...

資料結構 生成樹和最小生成樹

生成樹 指的是乙個包含了g的所有頂點的樹。生成樹是g的乙個極小連通的子圖。從g的任意頂點出發,做一次深度 廣度優先遍歷,訪問g中的n個頂點,並將順次訪問的兩個頂點之間的路徑記錄,經歷的n條邊就構成了g的極小連通子圖,也就是g的一棵生成樹。對於深度優先 dfs 和廣度優先 bfs 只要在if語句中加入...