Prim演算法求最小生成樹

2021-10-25 02:43:21 字數 1112 閱讀 4189

思想:設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,

再從集合u-v中找到另一點b使得點b到v中任意一點的權值最小,此時將b點也加入集合v;

以此類推,現在的集合v=,再從集合u-v中找到另一點c使得點c到v中任意一點的

權值最小,此時將c點加入集合v,直至所有頂點全部被加入v,此時就構建出了一顆mst。

因為有n個頂點,所以該mst就有n-1條邊,每一次向集合v中加入乙個點,就意味著找到

一條mst的邊

#include#includeusing namespace std;

#define max 100

#define maxcost 0x7fffffff

int graph[max][max];

int prim(int graph[max],int n)

mst[1] = 0;

for(i = 2;i <= n;i++)

} cout << "v" << mst[minid] << "-v" << minid << "權值為:" << min << endl;;

sum += min;//計算總權值

lowcost[minid] = 0;//將權值最小的點加入到mst中

//更新lowcost陣列和mst陣列

for(j = 2;j <= n;j++)

} }

return sum;

}int main() }

//構建圖

for(k = 1;k <= n;k++)

//求解最小生成樹

cout << "sum = " << prim(graph,m);

system("pause");

}

測試檔案input.txt資料

6 10

1 2 6

1 3 1

1 4 5

2 3 5

2 5 3

3 4 5

3 5 6

3 6 4

4 6 2

5 6 6

Prim演算法求最小生成樹

本文參考 google 資料結構 c語言 prim演算法,求最小生成樹 include include 最小生成樹prim define max 65535 using namespace std struct graph int prim graph g flag 0 1 將0號結點加入集合s i...

Prim演算法求最小生成樹

cost i j 存i和j之間的距離,vis i 記錄i點是否被訪問,lowc j 存所有與j點連線的邊的最小的權值。每次找最小的lowc j 然後。最小生成樹 int prim int cost maxn int n 點是0 n 1 if minc inf return 1 原圖不連通 ans m...

Prim演算法求最小生成樹

樸素prim演算法 1 距離初始化成正無窮 2 n次迭代 找到集合外距離最近的點,賦值給t 3 用t更新其他點到集合的距離 跟狄傑斯塔拉不一樣,狄傑斯塔拉是跟原點的距離 點與集合所有點距離最短的點 st t true 給定乙個n個點m條邊的無向圖,圖中可能存在重邊和自環,邊權可能為負數。求最小生成樹...