标签:
一水,最小生成树,缓解心情
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf=(1<<31)-1;
int map[110][110];
int lowest[110];
bool vis[110];
void init(int n){
for(int i=1;i<=n;i++)
lowest[i]=inf;
memset(vis,false,sizeof(vis));
}
void slove(int n){
lowest[1]=0;
for(int i=2;i<=n;i++)
lowest[i]=map[1][i];
vis[1]=true;
for(int i=1;i<=n;i++){
int pos=-1,minc=inf;
for(int k=1;k<=n;k++){
if(!vis[k]&&minc>lowest[k]){
minc=lowest[k]; pos=k;
}
}
// cout<<minc<<‘ ‘<<pos<<endl;
if(pos==-1) break;
vis[pos]=true;
for(int k=1;k<=n;k++){
if(!vis[k]){
if(lowest[k]>map[pos][k])
lowest[k]=map[pos][k];
}
}
}
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]);
}
init(n);
slove(n);
int ans=0;
for(int i=1;i<=n;i++)
ans+=lowest[i];
printf("%d\n",ans);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/jie-dcai/p/4288509.html