Skip to content

Commit

Permalink
added Kruskal's Algorithm in Greedy approach
Browse files Browse the repository at this point in the history
  • Loading branch information
mahammadctr authored Oct 4, 2023
1 parent e5dad3f commit 8f7910a
Showing 1 changed file with 111 additions and 0 deletions.
111 changes: 111 additions & 0 deletions greedy_approach/Kruskal's Algorithm.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#include <stdio.h>

#define MAX 30

typedef struct edge {
int u, v, w;
} edge;

typedef struct edge_list {
edge data[MAX];
int n;
} edge_list;

edge_list elist;

int Graph[MAX][MAX], n;
edge_list spanlist;

void kruskalAlgo();
int find(int belongs[], int vertexno);
void applyUnion(int belongs[], int c1, int c2);
void sort();
void print();

// Applying Kruskal Algo
void kruskalAlgo() {
int belongs[MAX], i, j, cno1, cno2;
elist.n = 0;

for (i = 1; i < n; i++)
for (j = 0; j < i; j++) {
if (Graph[i][j] != 0) {
elist.data[elist.n].u = i;
elist.data[elist.n].v = j;
elist.data[elist.n].w = Graph[i][j];
elist.n++;
}
}

sort();

for (i = 0; i < n; i++)
belongs[i] = i;

spanlist.n = 0;

for (i = 0; i < elist.n; i++) {
cno1 = find(belongs, elist.data[i].u);
cno2 = find(belongs, elist.data[i].v);

if (cno1 != cno2) {
spanlist.data[spanlist.n] = elist.data[i];
spanlist.n = spanlist.n + 1;
applyUnion(belongs, cno1, cno2);
}
}
}

int find(int belongs[], int vertexno) {
return (belongs[vertexno]);
}

void applyUnion(int belongs[], int c1, int c2) {
int i;

for (i = 0; i < n; i++)
if (belongs[i] == c2)
belongs[i] = c1;
}

// Sorting algo
void sort() {
int i, j;
edge temp;

for (i = 1; i < elist.n; i++)
for (j = 0; j < elist.n - 1; j++)
if (elist.data[j].w > elist.data[j + 1].w) {
temp = elist.data[j];
elist.data[j] = elist.data[j + 1];
elist.data[j + 1] = temp;
}
}

// Printing the result
void print() {
int i, cost = 0;

for (i = 0; i < spanlist.n; i++) {
printf("\n%d - %d : %d", spanlist.data[i].u, spanlist.data[i].v, spanlist.data[i].w);
cost = cost + spanlist.data[i].w;
}

printf("\nSpanning tree cost: %d", cost);
}

int main() {
int i, j, total_cost;

printf("Enter the number of vertices: ");
scanf("%d", &n);

printf("Enter the adjacency matrix (0 for no edge, weight for edge):\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &Graph[i][j]);

kruskalAlgo();
print();
return 0;
}

0 comments on commit 8f7910a

Please sign in to comment.