#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 110;
const int MAX = 0x3f3f3f3f;
int mp[maxn][maxn];
int cost[maxn];
int n, m;
int prim(int n)
{
int v[maxn];
memset(v, 0, sizeof(v));
v[1] = 1;
int ans = 0;
for (int i = 1; i <= n; i++) cost[i] = mp[1][i];
for (int i = 2; i <= n; i++)
{
int minn = MAX;
int f = -1;
for (int j = 1; j <= n; j++)
{
if (v[j] == 0 && minn > cost[j])
{
minn = cost[j];
f = j;
}
}
if (f == -1) return -1;
ans += minn;
v[f] = 1;
for (int j = 1; j <= n; j++)
{
if (v[j] == 0 && cost[j] > mp[f][j])
{
cost[j] = mp[f][j];
}
}
}
return ans;
}
int main()
{
while (cin >> n >> m)
{
for (int i = 0; i <= n; i++)
{
for (int j = 0; j <= n; j++)
{
mp[i][j] = MAX;
}
}
int a, b, c;
for (int i = 0; i < m; i++)
{
scanf("%d%d%d", &a, &b, &c);
if (mp[a][b] > c)
{
mp[a][b] = c;
mp[b][a] = c;
}
}
printf("%d\n", prim(n));
}
}
prim算法----Kruskal一般不考
猜你喜欢
转载自blog.csdn.net/weixin_42137874/article/details/110406258
今日推荐
周排行