题目大意:求连接各个点的铁路的最小路径
代码:
#include<iostream>
using namespace std;
#define MAX 30
int arc[MAX][MAX],lowcost[MAX],adjvex[MAX],sum;
void GMraph(int n){
int i,a,b;
char ch1,ch2;
for(i = 0;i < n;i++)
for(int j = 0;j < n;j++)
arc[i][j] = 999999; //如果初始化邻接矩阵的时候就有0 要把0转换成一个较大的数 ********
for(i = 1;i < n;i++){
cin>>ch1>>a;
while(a--){
cin>>ch2>>b;
arc[ch1 - 'A'][ch2 - 'A'] = b;
arc[ch2 - 'A'][ch1 - 'A'] = b;
}
getchar();
}
}
int MinEdge(int a[],int n){
int min = 999999;
int i,j;
for(i = 1;i < n;i++){
if(a[i] != 0){
if(a[i] < min){
min = a[i];
j = i;
}
}
}
return j;
}
void Prim(int n){
int i,j;
for(i = 1;i < n;i++){
lowcost[i] = arc[0][i];
adjvex[i] = 0;
}
lowcost[0] = 0;
for(i = 1;i < n;i++){
int k = MinEdge(lowcost,n);
sum += lowcost[k];
lowcost[k] = 0;
for(j = 1;j < n;j++){
if(arc[k][j] < lowcost[j]){
lowcost[j] = arc[k][j];
adjvex[j] = k;
}
}
}
}
int main(){
int n;
while(cin>>n&&n){
GMraph(n);
sum = 0;
Prim(n);
cout<<sum<<endl;
}
return 0;
}