码迷,mamicode.com
首页 > 编程语言 > 详细

最小生成树第三弹ps:prim算法

时间:2015-08-20 22:23:14      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:

prim算法的基本思想:

从连通网N={V,E}中的某一顶点U0出发,选择与它关联的具有最小权值的边(U0,v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合U中。如此继续下去,直到网中的所有顶点都加入到生成树顶点集合U中为止。

由于和dijkstra差不多,所以用邻接矩阵存储;

模板(低智商的我果断的把他取了个名字==)

 

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

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

cin >> g[i][j];

memset(minn,0x7f,sizeof(minn)); //初始化为maxint minn[1] = 0;

memset(u,1,sizeof(u)); //初始化为True,表示所有顶点为蓝点

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

{ int k = 0; for (j = 1; j <= n; j++) //找一个与白点相连的权值最小的蓝点k

if (u[j] && (minn[j] < minn[k]))

k = j;

u[k] = false; //蓝点k加入生成树,标记为白点

for (j = 1; j <= n; j++) //修改与k相连的所有蓝点

if (u[j] && (g[k][j] < minn[j])) minn[j] = g[k][j]; }

int total = 0;

for (i = 1; i <= n; i++) //累加权值

total += minn[i];

cout << total << endl;

return 0; }

最小生成树第三弹ps:prim算法

标签:

原文地址:http://www.cnblogs.com/20003238wzc--/p/4746315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!