Kruskal's Algorithm Code
#include
using namespace std;
struct Edge {
int src, dest, weight;
};
int find(vector& parent, int node) {
if (parent[node] != node) {
parent[node] = find(parent, parent[node]);
}
return parent[node];
}
void unionSets(vector& parent, vector& rank, int u, int v) {
int rootU = find(parent, u);
int rootV = find(parent, v);
if (rootU != rootV) {
if (rank[rootU] > rank[rootV]) {
parent[rootV] = rootU;
} else if (rank[rootU] < rank[rootV]) {
parent[rootU] = rootV;
} else {
parent[rootV] = rootU;
rank[rootU]++;
}
}
}
int kruskal(int n, vector& edges) {
sort(edges.begin(), edges.end(), [](const Edge& a, const Edge& b) {
return a.weight < b.weight;
});
vector parent(n), rank(n, 0);
for (int i = 0; i < n; ++i) {
parent[i] = i;
}
int mstCost = 0;
vector mstEdges;
for (const auto& edge : edges) {
if (find(parent, edge.src) != find(parent, edge.dest)) {
mstCost += edge.weight;
mstEdges.push_back(edge);
unionSets(parent, rank, edge.src, edge.dest);
}
}
cout << "Edges in the MST for distributing resources across disaster-hit zones:\n";
for (const auto& edge : mstEdges) {
cout << edge.src << " -- " << edge.dest << " == " << edge.weight << '\n';
}
return mstCost;
}
void krus_11() {
int n = 4;
vector edges = {
{0, 1, 4},
{1, 2, 1},
{0, 2, 3},
{2, 3, 2},
{1, 3, 5}
};
int mstCost = kruskal(n, edges);
cout << "Total cost of MST: " << mstCost << '\n';
}