找最小边,合并边
为了避免形成环,使用并查集来记录连通分量
#include <iostream>
#include <bits/stl_algo.h>
using namespace std;
int n, m;
int u[100], v[100], w[100], p[100], r[100];
int cmp(const int i, const int j) {
return w[i] < w[j];
}
int find(int x) {
return p[x] == x ? x : p[x] = find(p[x]);
}
int kruskal() {
int ans = 0;
for (int i = 0; i < n; ++i) {
p[i] = i;
}
for (int i = 0; i < m; ++i) {
r[i] = i;
}
sort(r, r + m, cmp);
for (int i = 0; i < m; ++i) {
int e = r[i];
int x = find(u[e]);
int y = find(v[e]);
if (x != y) {
cout << u[e] << "---" << v[e] << ":" << w[e] << endl;
ans += w[e];
p[x] = y;
}
}
return ans;
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; ++i) {
cin >> u[i] >> v[i] >> w[i];
}
int res = kruskal();
cout << res << endl;
return 0;
}