演算法與資料結構 六 最小生成樹(C 實現)

2021-09-30 01:17:11 字數 935 閱讀 4000

對圖進行深度優先搜素或者廣度優先搜尋,可以生成一顆深度優先搜尋樹或者廣度優先搜尋樹。搜尋的出發點不同,生成樹的形態也不同。

在乙個有權連通圖中,生成樹的各邊權值之和最小的那棵樹稱作最小權值生成樹,簡稱最小生成樹。

kruskal演算法是一種按照網路中各邊權值遞增順序構造最小生成樹的方法。

kruskal.cpp

//最小生成樹的貪心演算法kruskal實現

#include#include#include#includeusing namespace std;

struct edge

edge(int u0, int v0, int w0) :u(u0), v(v0), w(w0){}

};int n;//n:頂點個數

vectoredges;//edges:圖g的所有邊

int sum;//sum:最小生成樹長

vectormst;//mst:最小生成樹,用邊集表示

class disjsets

; int find(int x)//尋找點集根節點

; void unionsets(int root1, int root2)

else

};};bool cmp(const edge &lhs, const edge &rhs)

bool kruskal()

if (mst.size() == n - 1) return true;

} return false;

}int main()

} else

return 0;

}

程式執行結果如下圖所示:

參考:演算法分析與設計(c++描述) 石志國、劉冀偉、姚亦飛編著

大話資料結構 (六)最小生成樹

我們在講圖的定義和術語時,曾經提到過,乙個連通圖的生成樹是乙個極小的連通子圖,它含有圖中全部的頂點,但只有足以構成一棵樹的n 1條邊。那麼我們把構造連通網的最小代價生成樹稱為最小生成樹。在了解最小生成樹的概念之後,我們更應該看重的是如何獲取最小生成樹,並如何利用最小生成樹來解決問題。在給出prim演...

資料結構與演算法11 最小生成樹

最小生成樹 問題提出 要在n個城市間建立通訊聯絡網,城市間的通訊線路造價不同,希望找到一種方案使得建立該通訊網所需花費的總代價最小。問題分析 n個城市間,最多可設定n n 1 2條線路 n個城市間建立通訊網,至少需n 1條線路 問題轉化為 如何在可能的線路中選擇n 1條,能把所有城市 頂點 連起來,...

演算法與資料結構 最小生成樹(最小支撐樹)

概念 設g v,e 是乙個無向連通圖,生成樹上各邊的權值之和為該生成樹的代價,在g的所有生成樹中,代價最小的生成樹就稱為最小支撐樹,或稱最小生成樹。區別 最小生成樹是各邊權值和最小的數 最優歸併樹是帶權外部路徑長度最短的樹 演算法 kruskal演算法 prim演算法 來自 1 include 2 ...