最小生成樹

2022-06-09 07:15:07 字數 658 閱讀 5668

圖是由頂點和邊構成的抽象網路。在無向圖中,連通且不含圈的圖,即不能形成環,稱為樹。n個頂點,圖的最大邊數為n-1+n-2+... 而樹恒為n-1。

在各大城市中建設通訊網路,如下圖所示,每個圓圈代表一座城市,而邊上的數字代表了建立通訊連線的**。那麼,請問怎樣才能以最小的**使各大城市能直接或者間接地連線起來呢?

尋找最小生成樹,即尋找n-1條邊,其權值和最小,且將所有頂點連通起來構成一棵樹。

cnblogs收藏

csdn鏈結

一、prim演算法

將頂點分為兩個集合u v,任取一頂點u加入u,其餘為v,取u周圍權值最小的一條邊,該點為v,將v從v移至u中,對u中每個點尋找最小權值邊,該邊必須通向v中的一頂點,且不能和已選中的邊構成環路。一共尋找n-1條邊,將n個頂點相連。

二、kruskal演算法

直接找權值最小的邊,確保該邊不會構成環即可,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...