首页 > 编程语言 > 详细

最小生成树——Prim算法(C++)

时间:2016-01-04 22:21:05      阅读:261      评论:0      收藏:0      [点我收藏+]

源代码:

#include<cstdio>
#include<cstring>
int m,n,i[1001][1001],h[1001];
bool f[1001]={0};
long long ans(0);
int main()
{
memset(i,0x7f,sizeof(i));
memset(h,0x7f,sizeof(h));  //将数组初始化,定义为最大值,为下面查找最小值做铺垫。
h[1]=0;  //从编号为1的节点开始查找。
scanf("%d%d",&n,&m);
for (int a=1;a<=m;a++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
i[x][y]=i[y][x]=z;  //注意这是无向图。
}
for (int a=2;a<=n;a++)
{
int t(0);
for (int b=1;b<=n;b++)
if (!f[b]&&(h[b]<h[t]))
t=b;
f[t]=true;
for (int b=1;b<=n;b++)
if (!f[b]&&(h[b]>i[t][b]))
h[b]=i[t][b];
}  //同理于Dijkstra算法。
for (int a=1;a<=n;a++)
ans+=h[a];  //所有的正确边的权值已被查找更新完毕,累加就可以了。
printf("%d",ans);
return 0;
}

最小生成树——Prim算法(C++)

原文:http://www.cnblogs.com/koruko/p/5100226.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!