#include <stdio.
h>
int main() {
int n, e;
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter number of edges: ");
scanf("%d", &e);
int u[e], v[e], w[e];
int i, j;
printf("\nEnter edges (u v w):\n");
for (i = 0; i < e; i++) {
scanf("%d %d %d", &u[i], &v[i], &w[i]);
}
/* Step 1: Sort edges based on weight (Bubble Sort) */
for (i = 0; i < e - 1; i++) {
for (j = 0; j < e - i - 1; j++) {
if (w[j] > w[j + 1]) {
int temp = w[j];
w[j] = w[j + 1];
w[j + 1] = temp;
temp = u[j];
u[j] = u[j + 1];
u[j + 1] = temp;
temp = v[j];
v[j] = v[j + 1];
v[j + 1] = temp;
}
}
}
/* Step 2: Kruskal – Used parent[] for cycle checking */
int parent[n];
for (i = 0; i < n; i++)
parent[i] = i;
int find, x, y;
int mst_cost = 0;
printf("\nEdges in MST:\n");
for (i = 0; i < e; i++) {
/* Find parent of u[i] */
x = u[i];
while (parent[x] != x)
x = parent[x];
/* Find parent of v[i] */
y = v[i];
while (parent[y] != y)
y = parent[y];
if (x != y) { // no cycle
printf("%d -- %d (weight %d)\n", u[i], v[i], w[i]);
mst_cost += w[i];
parent[y] = x; // union
}
}
printf("\nTotal cost of MST = %d\n", mst_cost);
return 0;
}