最短路prim算法模板,仅作记录
//
// Created by 29273 on 2022-02-23.
// Prim 最短路径算法模板
#include<iostream>
#include "bits/stdc++.h"
using namespace std;
const int maxN = 1e2 + 10;
#define inf 0x3f3f3f3f
int n, ans, k, m, a, b, c;
int dist[maxN],dist1[maxN];
int vis[maxN];
int G[maxN][maxN];
int prim(int root) {
int ans = 0;
memset(dist, inf, sizeof dist);
memset(dist, inf, sizeof dist1);
for (int i = 0; i <= n; ++i) {
dist[i] = G[i][root];
}
dist[root] = 0;
for (int i = 0; i < n; ++i) {
int u = -1;
int min_dist = inf;
for (int j = 1; j <= n; ++j) {
if (!vis[j] && dist[j] < min_dist) {
u = j;
min_dist = dist[j];
}
}
if (u == -1) return -1;
ans += min_dist;
vis[u] = 1;
for (int j = 1; j <= n; ++j) {
if (!vis[j] && G[u][j] < dist[j]) {
dist[j] = G[u][j];
}
}
}
return ans;
}
int main() {
cin >> n >> m;
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= n; ++j) {
G[i][j] = inf;
}
}
for (int i = 0; i < m; ++i) {
cin >> a >> b >> c;
G[a][b] = c;
G[b][a] = c;
}
cout << endl << prim(1) << endl;
return 0;
}
/*
* 6 6
1 6 1
1 3 1
3 5 2
4 5 3
2 4 1
1 2 2
*/