测试用例
6 10
0 1 4
0 4 1
0 5 2
1 2 6
1 5 3
2 3 6
2 5 5
3 4 4
3 5 5
4 5 3
输出
15
Prim算法
#include <stdio.h>
#include <algorithm>
using namespace std;
#define maxn 100
#define INF 10000
int G[maxn][maxn];
int dist[maxn];
int visited[maxn]={0};
int n,m;
int Prim(int s)
{
fill(dist,dist+maxn,INF);
dist[s]=0;
int ans=0;
for(int i=0;i<n;i++)
{
int u=-1,MIN=INF;
for(int j=0;j<n;j++)
{
if(visited[j]==0&&dist[j]<MIN)
{
u=j;
MIN=dist[j];
}
}
if(u==-1)break;
visited[u]=1;
ans+=dist[u];
for(int v=0;v<n;v++)
{
if(visited[v]==0&&G[u][v]!=INF&&G[u][v]<dist[v])
{
dist[v]=G[u][v];
}
}
}
return ans;
}
int main()
{
freopen("input.txt","r",stdin);
scanf("%d%d",&n,&m);
int v1,v2,w;
fill(G[0],G[0]+maxn*maxn,INF);
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&v1,&v2,&w);
G[v1][v2]=G[v2][v1]=w;
}
printf("%d",Prim(0));
}