#include<bits/stdc++.h>
using namespace std;
const int MAXN=1005;
#define INF 0x3f3f3f3f
int matr[MAXN][MAXN],n,minn[MAXN],vis[MAXN],tot=0;
void Prim(){
for(int i=1;i<=n;i++){
int k=0;
for(int j=1;j<=n;j++){
if(vis[j]&&minn[j]<minn[k])
k=j;
}
vis[k]=false;
for(int j=1;j<=n;j++){
if(vis[j]&&matr[k][j]<minn[j])
minn[j]=matr[k][j];
}
}
for(int i=1;i<=n;i++) tot+=minn[i];
printf("%d",tot);
}
int main(){
memset(minn,INF,sizeof(minn));
minn[1]=0;
memset(vis,true,sizeof(vis));
//初始化;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&matr[i][j]);
//读入;
Prim();
return 0;
}
最小生成树——Prim
最新推荐文章于 2022-01-03 17:02:06 发布