#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=200,MAX=0x3f3f3f3f;
int n;
int from,to,w;
int dist[N],map[N][N];
bool biao[N];
int prim()//算法部分模板
{
memset(dist,0x3f,sizeof(dist));
memset(biao,0,sizeof(biao));
int t=1,sum=0;
dist[1]=0,biao[1]=1;
for(int i=0;i<n-1;i++)
{
for(int j=1;j<=n;j++)
dist[j]=min(dist[j],map[t][j]);
t=-1;
for(int j=1;j<=n;j++)
{
if(!biao[j]&&(t==-1||dist[t]>dist[j]))
t=j;
}
sum+=dist[t];
biao[t]=1;
}
return sum;
}
int main()
{
while(cin>>n&&n)
{
int t=n-1;
memset(map,0x3f,sizeof(map));
while(t--)
{
char c;
cin>>c;
int kk=c-'A'+1;//输入字符后就马上将字符转化为数字,
int m;
cin>>m;
while(m--)
{
char cc;
int mm;
cin>>cc;
int ll=cc-'A'+1;
cin>>mm;
map[kk][ll]=map[ll][kk]=mm;//路径要是双向的
}
}
int sum=prim();
cout<<sum<<endl;
}
return 0;
}
题意:
依旧是找最小路径长,
但本题的奇特之处是,地点用字母表示,不过没关系,那就再把他转化为数字就好了,真聪明