题目链接:https://vjudge.net/contest/240400#problem/F
问题代码:
#include<iostream>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
int n;
int mp[30][30];
int dis[30];
char vis[30];
void prim(){
int min;
int k;
dis[1]=0;
while(1){
min=INF;
k=-1;
for(int i=1;i<=n;i++){
if(dis[i]<min&&!vis[i]){
//cout<<dis[i]<<'!'<<endl;
min=dis[i];
k=i;
}
//cout<<'$'<<endl;
}
//cout<<k<<endl;
//cout<<"******************"<<endl;
if(k==-1){
break;
}
vis[k]=1;
for(int i=1;i<=n;i++){
if(mp[k][i]<dis[i]&&!vis[i]){
dis[i]=mp[k][i];
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
//cout<<dis[i]<<'*'<<endl;
ans+=dis[i];
}
cout<<ans<<endl;
}
int main(){
cin>>n;
memset(dis,INF,sizeof(dis));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j){
mp[i][j]=0;
}else{
mp[i][j]=INF;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mp[i][j];
}
}
prim();
}