次小生成樹

2021-08-18 09:41:44 字數 1081 閱讀 2097

次小生成樹,就是求除了最小生成樹之外最小的那個生成樹。

下面介紹一下利用prim求次小生成樹的主要步驟。

次小生成樹資料比較少,尤其是max陣列的由來,在此解釋一下:

max[v][u] = max[u][v] = max(max[pre[u]][v], dis[u]);

max[u][v] 記錄的的是u--v之間的最大權值(最大邊),為什麼要用max[pre[u]][v] (也就是u的直接前驅)跟dis[u]作比較,取最大值呢?

你想想看,max陣列記錄的是mst中連線兩點的最大距離(兩點之間最大邊權),在新加乙個u點到mst中。那麼u--v之間的最大邊權,有兩種情況:

我只用了prim演算法,下次補充kruskal構造最小生成樹的方法。。。

poj the unique mst(次小生成樹)

#include#include#include#includeusing namespace std;

const int maxn = 111;

const int inf = 0x3f3f3f3f;

bool visit[maxn], use[maxn][maxn];

int dis[maxn], pre[maxn], e[maxn][maxn], max[maxn][maxn];

int m, n;

int prim()

} if(u == -1) break;

sum += minn;

visit[u] = true;

use[pre[u]][u] = use[u][pre[u]] = true;

for(int v = 1; v <= n; ++v)

} }return sum; //最小生成樹的權值之和

}int smst(int sum)

void solve()else

}int main()

solve();

}}

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

次小生成樹

演算法引入 設g v,e,w 是連通的無向圖,t是圖g的一棵最小生成樹 如果有另一棵樹t1,滿足不存在樹t t t1 則稱t1是圖g的次小生成樹 演算法思想 鄰集的概念 由t進行一次可行交換得到的新的生成樹所組成的集合,稱為樹t的鄰集,記為n t 設t是圖g的最小生成樹,如果t1滿足 t1 min,...

次小生成樹

分類 圖論 2013 02 12 15 03 32人閱讀收藏 舉報次小生成樹 在求最小生成樹時,用陣列path i j 來表示mst中i到j最大邊權。求完後,直接列舉所有不在mst中的邊,把它加入到mst中構成一棵新的樹,且該樹有環,此環是由剛加入的邊 i,j 造成的,所以可以通過刪除path i ...