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;
}

浙公网安备 33010602011771号