Jungle Roads(poj1251)prim

#include <iostream>
#define MAX 27
#define MAXCOST 101
using namespace std;

int vertices[MAX],lowcost[MAX],minv,totalcost;
int edges[MAX][MAX];
bool visited[MAX];

int prim(int vertex_num,int v)
{
 int i,j;
    totalcost=0;
    visited[v]=true;
    for(i=0;i<vertex_num;i++)
        lowcost[i]=edges[v][i];
    for(i=1;i<vertex_num;i++)
    {
        minv=MAXCOST;

        for(j=0;j<vertex_num;j++)
            if(!visited[j]&&lowcost[j]<minv)//lowcost[j]是从顶点v到顶点j的权值
            {
                minv=lowcost[j];
                v=j;
            }
        visited[v]=true;
        totalcost+=minv;
        for(int j=0;j<vertex_num;j++)
            if(!visited[j]&&edges[v][j]<lowcost[j])
                lowcost[j]=edges[v][j];
    }
    return totalcost;
}

int main()
{
 int i;
    int num,degree,cost;
    char vertex;
    while(cin>>num && num)
    {
        for(i=0;i<num;i++) vertices[i]=i;
        for(int i=0;i<num;i++)
            for(int j=0;j<num;j++)
                edges[i][j]=MAXCOST;
        for(i=0;i<num;i++) visited[i]=false;

        for(i=0;i<num-1;i++)
        {
            cin>>vertex>>degree;
            for(int j=0;j<degree;j++)
            {
                cin>>vertex>>cost;
                edges[i][vertex-'A']=cost;
                edges[vertex-'A'][i]=cost;
            }
        }
        cout<<prim(num,0)<<endl;
    }
    return 0;
}

posted @ 2011-03-05 22:10  acm_poj  阅读(167)  评论(0)    收藏  举报