您的位置:首页 > 其它

SDUT OJ 2144 最小生成树

2014-12-20 22:12 357 查看

#include<iostream>
#include<memory.h>
#define MAX 0x3f3f3f3f
#define N 110
using namespace std;
int low
,map

,visit
;
int n;
int prim()//普里姆算法
{
int i,j,pos,min,result=0;
memset(visit,0,sizeof(visit));
visit[1]=1; pos=1;
for(i=1;i<=n;i++)
if(i!=pos) low[i]=map[pos][i];
for(i=1;i<n;i++)
{
min=MAX;
for(j=1;j<=n;j++)
{
if(visit[j]==0 && min>low[j])
{
min=low[j]; pos=j;
}
}
if(MAX==min)
{
return -1;
}
result+=min;
visit[pos]=1;
for(j=1;j<=n;j++)
{
if(visit[j]==0 && low[j]>map[pos][j])
low[j]=map[pos][j];
}
}
return result;
}
int main()
{
int m,a,b,c,k,i;
while(cin>>n>>m)
{
memset(map,MAX,sizeof(map));
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
if(map[a][b]>c)//居然还有相同边....醉了...
{
map[a][b]=map[b][a]=c;
}
}
k=prim();
cout<<k<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  最小生成树