比较简单的最小生成树题~
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=27;
int n,map[maxn][maxn],dist[maxn];
int Prim()
{
int ans=0;
for(int i=0;i<n;i++)
dist[i]=map[0][i];
dist[0]=-1;
for(int i=1;i<n;i++)
{
int pos,mini=1<<29;
for(int j=0;j<n;j++)
if(dist[j]!=-1&&dist[j]<mini)
{
mini=dist[j];
pos=j;
}
dist[pos]=-1;
ans+=mini;
for(int j=0;j<n;j++)
dist[j]=min(dist[j],map[pos][j]);
}
return ans;
}
int main()
{
while(scanf("%d",&n)&&n)
{
memset(map,0x10f,sizeof(map));
for(int i=1;i<n;i++)
{
char u[5];
int m;
scanf("%s%d",u,&m);
for(int j=0;j<m;j++)
{
char v[5];
int ita;
scanf("%s%d",v,&ita);
map[u[0]-'A'][v[0]-'A']=map[v[0]-'A'][u[0]-'A']=ita;
}
}
printf("%d\n",Prim());
}
return 0;
}