prim演算法使用模組

2021-08-24 17:23:11 字數 1179 閱讀 3623

附帶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.選擇一出...