附帶kruskal演算法 演算法鏈結
#include
#include
#include
using
namespace
std;
#define max 100
#define inf 0x3f3f3f3f
int dist[max], path[max];
int lowcost[max], vst[max], v;
struct mgraph
g;void init()
void insert(int u, int v, int w)
void prim(mgraph g,int v0, int &sum)
vst[v0] = 1; //將v0併入樹
sum = 0; //將sum清零用來累計樹的權值
for(i = 0; i < g.n - 1; ++i)
}
vst[k] = 1;
v = k;
//這裡用sum記錄了最小生成樹的權值。如輸出各邊,或者將各邊存入陣列中
sum += min;
//下面這個迴圈以剛併入的頂點v為媒介更新候選邊
for(j = 0; j < g.n; ++j)
} }
} int main()
int sum = 0;
prim(g, 0, sum);
cout
<< sum << endl;
return0;}
/*演算法執行過程 ()
1將vo到其他頂點的所有邊當作候選邊
2重複以下步驟n-1次,使得其他n-1個頂點被併入到生成樹中
從候選邊中挑選出權值最小的邊輸出,
並將與該邊另一端相接的頂點v併入生成樹中
考查所有剩餘的頂點vi,
如果(v,vi)的權值比lowcost[vi]小,
則用(v,vi)的權值更新lowcost[vi]
*//*測試資料
8 50 1 5
0 2 1
0 3 2
1 2 3
1 4 4
2 3 6
2 4 2
3 4 3
*/
使用prim演算法生成隨機迷宮
三 prim演算法和迷宮生成 1.我們將迷宮定義如下 迷宮由道路和牆組成,且迷宮中道路上的任意兩點應互相可達 2.隨機迷宮生成演算法一般有以下三種,這裡只介紹隨機prim演算法 最小生成樹 在帶權圖g v,e 中 v為點集,e為邊集且每條邊帶有權值 我們希望找到e的乙個無環子集t,使得v中任意兩點可...
Prim演算法 Kruskal演算法
一 prim演算法 1 要求 1 生成一顆連通的樹 2 生成樹 包含全部頂點,v 1條邊,沒有迴路,並且新增一條邊會變成有迴路 3 權重和最小 2 過程模擬 最重要 貪心的思想,每一步都要選擇權值最小的,這棵樹所有跟頂點相連的邊中最小的。從根節點開始,讓樹慢慢的長大。過程 從v1開始 跟v1有聯絡的...
Prim演算法 Kruskal演算法
prim演算法 kruskal演算法 prim演算法和kruskal演算法,都是用來找出圖中最小生成樹的演算法,兩個演算法有些小差別。prim演算法 又稱普里姆演算法,以圖上的頂點為出發點,逐次選擇到最小生成樹頂點集距離最短的頂點為最小生成樹的頂點,並加入到該頂點集,直到包含所有的頂點。1.選擇一出...