邻接矩阵最小生成树:
#include<iostream>
#include<iomanip>
#include<string>
#include<algorithm>
using namespace std;
int n;//顶点数
int map[30][30]; //邻接矩阵
char temp;int a;
int used[27]; //0表示没用过,1表示用过
int d[27];
int ans = 0;
int prim(){
for(int i=0;i<n;i++){
used[i] = 0;
}
for(int i=0;i<n;i++){
d[i] = 999999999;
}
d[0] = 0;
while(1){
int p = -1; //指向最小的顶点
for(int i=0;i<n;i++){
if(used[i]==0&&(p==-1||d[i]<d[p]))
p = i;
}
if(p==-1) break;
used[p] = 1;
ans = ans+d[p];
for(int i=0;i<n;i++){
d[i] = min(d[i],map[p][i]);//更新距离,
}
}
cout<<ans;
}
int main(){
(cin>>n).get();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
map[i][j] = 999999999;
}
}
for(int i=0;i<n-1;i++){
(cin>>temp).get();
(cin>>a).get();
for(int j=0;j<a;j++){
char b;
(cin>>b).get();
(cin>>map[i][b-'A']).get();
map[b-'A'][i] = map[i][b-'A'];//无向图
}
}
prim();
return 0;
}