用prim算法实习最小生成树;
题目:http://acm.tju.edu.cn/toj/showp.php?pid=1924

代码如下:
#include<iostream>
using namespace std;
int Prim(int money[27][27], int n)
{
    /* lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树 */
    int lowcost[27];
        /* mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树 */
    int mst[27];
        int i, j, min, minid, sum = 0;
        for (i = 1; i <= n; i++)
    {
        
        lowcost[i] = money[0][i];
 
        
        mst[i] = 1;
    }
 
    
    mst[1] = 0;
 
    
    for (i = 1; i <= n; i++)
    {
        min = 101;
        minid = 0;
 
    
        for (j = 1; j <= n; j++)
        {
            
            if (lowcost[j] < min && lowcost[j] != 0)
            {
                min = lowcost[j];
                minid = j;
            }
        }
    
        //printf("%c - %c : %d\n", mst[minid] + 'A' - 1, minid + 'A' - 1, min);
 
        
        sum += min;
 
        
        lowcost[minid] = 0;
 
        
        for (j = 1; j <= n; j++)
        {
            
            if (money[minid][j] < lowcost[j])
            {
                
                lowcost[j] = money[minid][j];
 
                
                mst[j] = minid;
            }
        }
    }
    
    return sum;
}

int main()
{
    int n,m,i,j,k;
    int money[27][27];
    char a,b;
    while(1)
    {
            cin>>n;
            if(n==0) break;
            for(i=1;j<=n;j++)
            for(j=1;j<=n;j++)
            {
                         money[i][j]=101;
            }
            for(i=1;i<=n-1;i++)
            {
                            cin>>a>>m;
                            for(j=1;j<=m;j++)
                            cin>>b>>k;
                            money[a-'A'+1][b-'A'+1]=money[b-'A'+1][a-'A'+1]=k;
            }
     cout<<Prim(money,n)<<endl;
    } 
}

我觉得思路应给是对了,可怎么也同不过,哪位高人帮忙看看呢