乙個有n個節點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有n個結點,並且有保持圖連通的最少的邊。最小生成樹可以用kruskal演算法或者prim演算法求出。
kruskal
演算法的過程為不斷對子圖進行合併,直到形成最終的最小生成樹。prim
演算法的過程則是只存在乙個子圖,不斷選擇頂點加入到該子圖中,即通過對子圖進行擴張,直到形成最終的最小生成樹。
此**對著兩種演算法做了詳細介紹
最小生成樹的乙個典型問題
poj-1258
題意:要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間都可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同,因此另乙個目標是要使鋪設光纜的總費用最低。這就需要找到帶權的最小生成樹。
輸入:輸入包含多組資料。對於每組資料, 第一行包含乙個整數n表示農場的數量 (3 <= n <= 100). 接下來是乙個n*n的鄰接矩陣,表示各個村莊之間的距離 . 當然,對角線將是0,因為從農場到農場的距離對於這個問題並不有趣。
輸出:對於每種情況,請輸出乙個整數表示長度,該長度是連線整個農場集合所需的最小光纖長度的總和。
#include#includeusing namespace std;
int init[105][105],n;//無向圖的鄰接矩陣
int vis[105]=,mincost[105];//vis標記已經走過的節點,mincoat表示從x定點出發的邊到每個頂點的最小權值
/************************最小生成樹的prim演算法************************/
int prim()//從某個頂點出發,不斷新增邊
}return minsum;//求得題目最終的最小和
}int main()
return 0;
}
POJ 1258 最小生成樹
include include struct fiberfiber 10000 struct farmsfarms 100 void exchange struct fiber fiber,int i,int j int partition struct fiber fiber,int p,int ...
poj1258 最小生成樹
題目鏈結在這裡 題目描述 john要給村民通寬頻!他現在已經有了乙個高速網路了,現在想將村民相互連線起來。現給出村民之間的距離,求將他們連線起來的最小花費為多少。思路分析 最小生成樹,盤它就完事了。如下 include include include include include using na...
最小生成樹模板 POJ 1258
最小生成樹是乙個比較簡單資料結構,形成最小生成樹的方式有兩種。最小生成樹是有圖生成樹,保證樹的每條邊的權值之和最小的生成樹就叫做最小生成樹,這一類的題目起初比較基礎,主要是熟悉模板,poj 1258 也就是這樣的題目,非常適合剛剛學習的人。兩種方法的思路分別是找邊和找點,簡單點說就是,找到全集中最小...