#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e9;
int n,m,sum,matrix[100][100],vis[100],dis[100];
int prim()
{
sum=0;
for(int i=1; i<=n; i++)
{
dis[i]=matrix[1][i];
}
vis[1]=1;
for(int i=1; i<n; i++)
{
int to=-1;
int mini=maxn;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dis[j]<mini)
{to=j;
mini=dis[j];}
}
if(to==-1)
return -1;
vis[to]=1;
sum+=mini;
for(int j=1; j<=n; j++)
{
if(!vis[j])
dis[j]=min(dis[j],matrix[to][j]);
}
}
return sum;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(vis,0,sizeof(vis));
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
matrix[i][j]=maxn;
for(int i=1; i<=m; i++)
{
int f,t,v;
scanf("%d%d%d",&f,&t,&v);
matrix[f][t]=v;
matrix[t][f]=v;
}
int ans=prim();
printf("%d\n",ans);
}
return 0;
}
最小生成树prim算法
最新推荐文章于 2023-11-29 22:48:19 发布