最小生成樹

2021-09-24 14:33:38 字數 1444 閱讀 6159

熟悉最小生成樹的構造演算法,掌握最小生成樹的構造過程。
定義1 設t是乙個連通且迴路的無向圖,則稱t為無向樹,簡稱樹。樹中度數為1的結點稱為樹葉,度數大於1的結點稱為分枝點(或內點)。

定義2設g=是乙個連通的無向圖,若g的某個生成子圖是一棵樹,則稱該樹為g的生成樹,記為tg。

定義3假定圖g是具有n個結點的連通圖。對應於g的每一條邊e,指定乙個正數c(e),把c(e)稱作邊e的權,(可以是長度、運輸量、費用等)。g的生成樹也具有乙個樹權c(t),它是t的所有邊權的和。

定義4 在帶權的圖g的所有生成樹中,樹權最小的那棵生成樹,稱作最小生成樹。

定理1 (kruskal)

設圖g有n個結點,執行如下步驟

⑴ 選擇權最小的邊e1,置邊數i←1;

⑵ i=n-1結束,否則轉⑶;

⑶ 設定已選定e1,e2,,…,ei,在g中選取不同於e1,e2,,…,ei的邊ei+1,使無迴路且ei+1是滿足此條件的權最小的邊。

⑷ i←i+1,轉⑵。

本實驗要求從鍵盤輸入乙個賦權圖(邊權,以矩陣形式輸入),求出對應的最小生成樹。用c語言或matlab實現。

#include

using

namespace std;

int n,

**a;

bool

**b,

**c,d=0;

bool

besttree

(int);

void

closure()

;int

main()

cout<<

"請輸入帶權圖:"

<

for(i=

0;i)for

(int j=

0;j)besttree

(n-1);

for(i=

0;i)for

(int j=i;j

(b[i]

[j]==1)

b[j]

[i]==1;

cout<<

"最優樹為:"

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 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...