您的位置:首页 > 其它

HDOJ 1233

2014-04-30 18:35 267 查看

思路:入门题,求最小生成树;

#include<stdio.h>
#include<string.h>
int vis[101],dist[101];
int map[101][101];
void init(int n)
{
int i;
memset(vis,0,sizeof(vis));
for(i = 1;i <= n;i ++)
dist[i] = map[1][i];
}

int main()
{
int i,j,n,a,b,len,k,min,sum;
while(~scanf("%d",&n) && n)
{
for(i = 1;i <= (n*(n-1)) >> 1;i ++)
{
scanf("%d%d%d",&a,&b,&len);
map[a][b] = map[b][a] = len;
}
init(n);
vis[1] = 1;
sum = 0;
for(i = 0;i < n;i ++)
{
min = 1 << 30;
for(j = 1;j <= n;j ++)
{
if(!vis[j] && min > dist[j])
{
min = dist[j];
k = j;
}
}
vis[k] = 1;
if(min != 1 << 30)
sum += min;
for(j = 1;j <= n;j ++)
{
if(!vis[j] && dist[j] > map[k][j])
dist[j] = map[k][j];
}
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: