Skip to content

Commit 75bfca2

Browse files
committed
Minimum Spanning Tree: kruskal's algorithm:
1 parent 50ebcf9 commit 75bfca2

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include <stdio.h>
2+
3+
#define I 32767
4+
5+
int edges[3][9] = {
6+
{1, 1, 2, 2, 3, 4, 4, 5, 5},
7+
{2, 6, 3, 7, 4, 5, 7, 6, 7},
8+
{25, 5, 12, 10, 8, 16, 14, 20, 18}
9+
};
10+
11+
int set[8] = {-1};
12+
13+
// (7) vertices -> 7-1 (6) edges
14+
int t[2][6];
15+
16+
int included[9] = {0};
17+
18+
void unionOperation(int u, int v){
19+
if(set[u] < set[v]){
20+
set[u] += set[v];
21+
set[v] = u;
22+
}else{
23+
set[v] += set[u];
24+
set[u] = v;
25+
}
26+
}
27+
28+
int find(int u){
29+
int x = u;
30+
31+
while(set[x] > 0){
32+
x = set[x];
33+
}
34+
35+
return x;
36+
}
37+
38+
int main(){
39+
int i=0, j, u, v, k, min, n=7, e=9, sum=0;
40+
41+
while(i < n-1){
42+
// Identify min cost edge
43+
min = I;
44+
for(j=0; j<e; j++){
45+
// selected min cost edge should not be included
46+
if(included[j] == 0 && edges[2][j] < min){
47+
min = edges[2][j];
48+
u = edges[0][j]; v = edges[1][j];
49+
k = j;
50+
}
51+
}
52+
53+
// Check if there is a cycle is formed or not
54+
if(find(u) != find(v)){
55+
t[0][i] = u;
56+
t[1][i] = v;
57+
sum += min; // finding total cost
58+
i++;
59+
unionOperation(find(u) , find(v));
60+
}
61+
// update included array
62+
included[k] = 1;
63+
}
64+
65+
for(i=0; i<n-1; i++){
66+
printf("(%d, %d)," , t[0][i],t[1][i]);
67+
}
68+
69+
printf("\nTotal cost: %d",sum);
70+
71+
return 0;
72+
}
73+
Binary file not shown.

0 commit comments

Comments
 (0)