题意
最小生成树
第一行输入有n个村庄,接下去n-1行分别输入村庄名,与其相邻的村庄数,相邻村庄名,两村庄之间的距离
思路
Prim
代码
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n,vnum,map[30][30],low[30],cost;
char v1,v2;
while(cin>>n&&n){
int total=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)map[i][j]=0;
else map[i][j]=999999;
}
}
for(int i=1;i<n;i++){
cin>>v1>>vnum;
while(vnum--){
cin>>v2>>cost;
if(cost<map[v1-'A'+1][v2-'A'+1])
map[v1-'A'+1][v2-'A'+1]=map[v2-'A'+1][v1-'A'+1]=cost;
}
}
for(int i=1;i<=n;i++){
low[i]=map[1][i];
}
for(int i=1;i<n;i++){
int least=999999,leastnum=0;
for(int j=1;j<=n;j++){
if(low[j]<least&&low[j]!=0){
least=low[j];
leastnum=j;
}
}
if(leastnum!=0){
low[leastnum]=0;
total+=least;
for(int k=1;k<=n;k++){
if(map[leastnum][k]<low[k]){
low[k]=map[leastnum][k];
}
}
}
}
cout<<total<<endl;
}
return 0;
}