演算法 最小生成樹

2021-08-30 08:27:56 字數 850 閱讀 8448

前言:最小生成樹是在乙個給定的無向圖中求一棵樹,這棵樹包含無向圖中的所有頂點,且樹中的邊都來自無向圖中的邊,並且要滿足整棵樹的邊權之和最小。。

1、最小生成樹是樹,其邊數等於頂點數減1,且不會有環

2、對於給定的圖最小生成樹可以不唯一,但是邊權之和一定是唯一的。

3、其根節點可以是這棵樹上的任何乙個節點,題目中不做說明這預設根節點是0號頂點是根節點;但是為了最小生成樹的唯一,題目中一般會給定根節點。

最小生成樹有兩種演算法:第乙個是prime(普里姆)演算法,第二個是kruskal(克魯斯卡爾)演算法。

對圖g設定乙個集合s,存放已被訪問的頂點,然後每次從集合v-s中選取與集合s的最短距離最小的乙個頂點u加入集合s並進行訪問,之後令頂點u為中介點,優化從u能到達的頂點v與集合s之間的最短距離。prime演算法的思想和dijkstra演算法思想基本一樣,只不過prime演算法中優化的是與集合s的最短距離,dijkstra演算法中優化的是與起點s的最短距離。

對比dijastra演算法理解記憶.

const int maxv=1000;

const int inf=100000000;

int n,g[maxv][maxv];

int d[maxv];//表示頂點與集合s的最短距離

bool vis[maxv]=;

int prime();

int prime()

e[maxv];

bool cmp(dege a,edge b)

{ return a.costprime演算法適用於邊數較多,頂點數較少的稠密圖,kruskal演算法和prime演算法相反,適用於定點數較多,邊數較少的稀疏圖。根據題目的具體要求選擇合適的演算法。

最小生成樹演算法

由帶權的連通圖生成的數的各邊加起來稱為生成樹的權,把權值最小的生成樹稱為最小生成樹 minimum spanning tree 簡稱為mst 構造最小生成樹的方法就是利用mst性質,一條一條地選擇可以加入的邊。下面介紹兩種用於構造最小生成樹的演算法,其中第一種演算法稱為prim演算法,第二種演算法稱...

最小生成樹演算法

乙個最簡單的最小生成樹 圖結構練習 最小生成樹 time limit 1000ms memory limit 65536k 有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。輸...

最小生成樹演算法

假設 n 表示圖中點數,m表示圖中邊數。適用於稠密圖,時間複雜度 o n2 核心思想 每次挑一條與當前集合相連的最短邊。c st i 表示點i是否在當前生成樹集合中 dist i 表示點i到當前集合的最短邊的長度 g i j 表示點i和點j之間邊的長度 返回值 最小生成樹中所有邊的總長度 intpr...