最小生成樹

2021-07-06 03:21:28 字數 846 閱讀 2919

一顆帶權無向圖的生成樹的代價是該生成樹中所有邊的代價之和,最小代價生成樹就是一顆代價最小的生成樹,構建無向圖的最小生成樹就是採用貪心演算法,不過對於最小生成樹問題,需滿足以下約束條件:

邊權值結果…

…初始化

(0,5)

10加入樹

(2,3)

12加入

(1,6)

14加入

(1,2)

16加入

(3,6)

18丟棄

(3,4)

22加入

(4,6)

24丟棄

(4,5)

25加入

(0,1)

28不再考慮

為了實現kruskal演算法,必須找出最小代價的邊並將其從e中刪除,如果把e中的邊按權值進行排序,儲存為乙個順序表,就可以有效的完成上述兩個操作,但實際上,只要能夠快速地找到下一條邊最小代價的邊,就沒有要對e中的邊進行排序,顯然最小堆非常適合這個任務,因為最小堆可以在o(loge)時間內找出並刪除下一條最小權值的邊,而構造最小堆本身的時間複雜性為o(e).

偽**實現:

//最小生成樹演算法

void create mintree()

;//最小生成樹的集合

//t的邊數需小於n-1,卻無向圖的邊不能為空

while(t.edgescount1&&e.edgescount>0)

else

}//檢查最小生成樹的邊數是否滿足約束條件

if(t.egdescount!=n-1)

}

最小生成樹 次小生成樹

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