标签:
Description
Input
Output
Sample Input
9 A 2 B 12 I 25 B 3 C 10 H 40 I 8 C 2 D 18 G 55 D 1 E 44 E 2 F 60 G 38 F 0 G 1 H 35 H 1 I 35 3 A 2 B 10 C 40 B 1 C 20 0
Sample Output
216 30
利用primie算法实现,基本模板就可以:
#include<stdio.h>
#include<string.h>
int e[100][100];
int n;
int inf=99999;
void init();
int prime();
int main()
{
int cur,m,i,j,temp;
char str[100];
while(scanf("%d",&n)&&n)
{
init();
for(i=1;i<n;i++)
{
scanf("%s",str);
cur=str[0]-64;
scanf("%d",&m);
for(j=1;j<=m;j++)
{
scanf("%s",str);
temp=str[0]-64;
scanf("%d",&e[cur][temp]);
e[temp][cur]=e[cur][temp];
}
}
printf("%d\n",prime());
}
return 0;
}
int prime()
{
int sum=0;
int book[100]={0};
int dis[100]={0},i,min,minx,j;
for(i=1;i<=n;i++)
dis[i]=e[1][i];
book[1]=1;
for(j=1;j<n;j++)
{
min=inf;
for(i=1;i<=n;i++)
{
if(min>=dis[i]&&book[i]==0)
{
min=dis[i];
minx=i;
}
}
book[minx]=1;
if(min!=inf) sum+=min;
for(i=1;i<=n;i++)
{
if(book[i]==0&&dis[i]>e[minx][i])
dis[i]=e[minx][i];
}
}
return sum;
}
void init()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j) e[i][j]=0;
else e[i][j]=inf;
}
}
}
标签:
原文地址:http://blog.csdn.net/chudongfang2015/article/details/51346864