#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int w[N][N];
//dist表示外界的点到当前连通块边的最小值
int dist[N];
bool st[N];//看看当前点是不是已经在连通块当中了
int prim()
{
int res = 0;
memset(dist,0x3f,sizeof dist);
dist[1] = 0;
for(int i = 0 ; i < n ; i++)
{
int t = -1;
for(int j = 1 ; j <= n ; j++)
{
if(!st[j] && (t==-1 || dist[t]>dist[j]))
{
t = j;
}
}
res += dist[t];
st[t] = true;
for(int j = 1 ; j <= n ; j++)
{
dist[j] = min(dist[j],w[t][j]);
}
}
return res;
}
signed main()
{
cin>>n;
for(int i = 1 ; i <= n ; i++)
{
for(int j = 1; j <= n ; j++)
{
cin>>w[i][j];
}
}
cout<<prim()<<endl;
return 0;
}
1140. 最短网络 prim 最小生成树
最新推荐文章于 2024-07-20 09:51:47 发布