您的位置:首页 > 其它

HDU Jungle Roads 1301 最小生成树、

2012-08-06 20:56 375 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1301

题目大意:输入一个n,表示有n个村庄,然后下面是n-1行,每行开头有两个代表字母和数字,分别表示 起始点和与其相同的村庄的个数。然后就是与其相同的村庄和道路长度,求最小连通值。

代码

View Code

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int map[30][30];
int vis[30];
int prim(int n)
{
int ans = 0;
int d[30];
memset(vis,0,sizeof(vis));
int i,j,pos,min;

vis[1] = 1;
for(i = 2;i <= n;i++)
d[i] = map[1][i];

for(i =1;i < n;i++)
{
min = 0x7fffffff;
for(j = 2;j <= n;j++)
{
if(min > d[j] && !vis[j])
min = d[j],pos = j;
}

ans += min;

vis[pos] = 1;

for(j = 2;j <= n;j++)
if(d[j] > map[pos][j] && !vis[j])
d[j] = map[pos][j];
}
return ans;
}
int main()
{
int n,i,j,m,count,val,ans;
char s[5],d[5];
while(scanf("%d",&n)&&n)
{
for(i = 1;i <= n;i++)
for(j = 1;j <= n;j++)
map[i][j] = 0x7fffffff;

for(i = 0;i < n-1;i++)
{
scanf("%s %d",s,&count);
while(count--)
{
scanf("%s %d",d,&val);
map[s[0]-'A'+1][d[0]-'A'+1] = map[d[0]-'A'+1][s[0]-'A'+1] = val;
}
}
ans = prim(n);
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: