Skip to content

Commit 6d7bca1

Browse files
author
Bhrigu Kansra
authored
Merge pull request bhrigukansra#59 from hello-anmol/master
Added new Algorithm
2 parents 854ec90 + 437d171 commit 6d7bca1

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

Prim's MST algorithm

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
2+
#include <stdio.h>
3+
#include <limits.h>
4+
#include<stdbool.h>
5+
6+
#define V 5
7+
8+
int minKey(int key[], bool mstSet[])
9+
{
10+
11+
int min = INT_MAX, min_index;
12+
13+
for (int v = 0; v < V; v++)
14+
if (mstSet[v] == false && key[v] < min)
15+
min = key[v], min_index = v;
16+
17+
return min_index;
18+
}
19+
20+
21+
int printMST(int parent[], int n, int graph[V][V])
22+
{
23+
printf("Edge \tWeight\n");
24+
for (int i = 1; i < V; i++)
25+
printf("%d - %d \t%d \n", parent[i], i, graph[i][parent[i]]);
26+
}
27+
28+
void primMST(int graph[V][V])
29+
{
30+
31+
int parent[V];
32+
33+
int key[V];
34+
35+
bool mstSet[V];
36+
37+
for (int i = 0; i < V; i++)
38+
key[i] = INT_MAX, mstSet[i] = false;
39+
40+
41+
key[0] = 0;
42+
parent[0] = -1; // First node is always root of MST
43+
44+
45+
for (int count = 0; count < V-1; count++)
46+
{
47+
48+
int u = minKey(key, mstSet);
49+
50+
51+
mstSet[u] = true;
52+
53+
for (int v = 0; v < V; v++)
54+
55+
if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])
56+
parent[v] = u, key[v] = graph[u][v];
57+
}
58+
59+
60+
printMST(parent, V, graph);
61+
}
62+
63+
64+
65+
int main()
66+
{
67+
/* Let us create the following graph
68+
2 3
69+
(0)--(1)--(2)
70+
| / \ |
71+
6| 8/ \5 |7
72+
| / \ |
73+
(3)-------(4)
74+
9 */
75+
int graph[V][V] = {{0, 2, 0, 6, 0},
76+
{2, 0, 3, 8, 5},
77+
{0, 3, 0, 0, 7},
78+
{6, 8, 0, 0, 9},
79+
{0, 5, 7, 9, 0}};
80+
81+
82+
primMST(graph);
83+
84+
return 0;
85+
}

0 commit comments

Comments
 (0)