您的位置:首页 > 其它

hdu 1233 还是畅通工程 (MST,Prim)

2017-05-24 19:09 246 查看
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1233

#include<stdio.h>
#include<stdlib.h>

#define MAX 100
#define MAXCOST 0x7fffffff

int graph[MAX][MAX];
int Prim(int gragh[][MAX],int n){
int lowcost[MAX];
int mst[MAX];
int i,j,min,minid,sum=0;
for(i=2;i<=n;i++){//lowcost初始化
lowcost[i]=graph[1][i];
mst[i]=1;
}
mst[1]=0;
for(i=2;i<=n;i++){
min=MAXCOST;
minid=0;
for(j=2;j<=n;j++){ //比较
if(lowcost[j]<min&&lowcost[j]!=0){
min=lowcost[j];
minid=j;
}
}
//printf("%c - %c : %d\n", mst[minid] + 'A' - 1, minid + 'A' - 1, min);
sum+=min;
lowcost[minid]=0;
for(j=2;j<=n;j++){ //找新起点,谁小换谁,相同不换
if(graph[minid][j]<lowcost[j]){
lowcost[j]=graph[minid][j];
mst[j]=minid;
}
}
}
return sum;
}
int main(){
int i,j,m,a,b,length,sum1;
while(scanf("%d",&m)!=EOF){
if(m==0)break;
sum1=0;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
graph[i][j]=MAXCOST;
for(i=1;i<=m*(m-1)/2;i++){
scanf("%d %d %d",&a,&b,&length);
if(length<graph[a][b]){
graph[a][b]=length;
graph[b][a]=length;

}
}
sum1=Prim(graph,m);
printf("%d\n",sum1);

}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法学习