poj 1251

#include<iostream>
using namespace std;
int data[101][101];
int d[101];//存放当前的最小距离;
int v[101];//标记是否用过;
int sum;
const int maxint=99999;
void shuru(int n)
{
    int a,b,c;
    char as,nn;
    memset(data,0,sizeof(data));
    memset(d,0,sizeof(d));
    for(int i=1;i<=100;i++)//初始化data[][];
        for(int j=1;j<=100;j++)
        data[i][j]=maxint;
    for(int i=1;i<=n;i++)//初始化d[];使得其值为maxint;
        d[i]=maxint;
    for(int i=1;i<n;i++)
    {
        cin>>as>>a;
        while(a--)
        {cin>>nn>>b;data[as-'A'+1][nn-'A'+1]=b;
        data[nn-'A'+1][as-'A'+1]=b;}
    }
}
void prim(int n)
{
    d[1]=0;sum=0;
    memset(v,0,sizeof(v));
    for(int i=1;i<=n;i++)
    {
        int min=maxint;
        int k=1;
        for(int j=1;j<=n;j++)
        {
            if(!v[j]&&d[j]<=min)
            {
                min=d[j];
                k=j;
            }
        }
        sum=sum+min;
        v[k]=1;
        for(int g=1;g<=n;g++)
            if(!v[g]&&d[g]>data[k][g])
                d[g]=data[k][g];
    }
    cout<<sum<<endl;
}
int main()
{
    int n,m;
    while(cin>>n&&n)
    {
        shuru(n);
        prim(n);
    }
    return 0;
}

 

posted @ 2012-08-22 10:18  无名127  阅读(105)  评论(0编辑  收藏  举报