Skip to content

Commit d21efa6

Browse files
authored
Merge pull request #18 from apurwa-lohia/main
Algorithm
2 parents 7ef5b29 + a5c8415 commit d21efa6

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

Coding/kruskals_msp.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
#define V 6
5+
#define INFINITY 99999
6+
7+
int graph[V][V] = {{0, 4, 1, 4, INFINITY, INFINITY},
8+
{4, 0, 3, 8, 3, INFINITY},
9+
{1, 3, 0, INFINITY, 1, INFINITY},
10+
{4, 8, INFINITY, 0, 5, 7},
11+
{INFINITY, 3, 1, 5, 0, INFINITY},
12+
{INFINITY, INFINITY, INFINITY, 7, INFINITY, 0}};
13+
14+
void findMinimumEdge() {
15+
for (int i = 0; i < V; i++) {
16+
int min = INFINITY;
17+
int minIndex = 0;
18+
for (int j = 0; j < V; j++) {
19+
if (graph[i][j] != 0 && graph[i][j] < min) {
20+
min = graph[i][j];
21+
minIndex = j;
22+
}
23+
}
24+
cout << i << " - " << minIndex << "\t" << graph[i][minIndex] << "\n";
25+
}
26+
}
27+
28+
int main() {
29+
findMinimumEdge();
30+
return 0;
31+
}
32+
33+
34+
//1. Sort all the edges in non-decreasing order of their weight.
35+
//2. Pick the smallest edge. Check if it forms a cycle with the spanning tree formed so far. If cycle is not formed, include this edge. Else, discard it.
36+
//3. Repeat step#2 until there are (V-1) edges in the spanning tree.

Coding/prim's-algorithm.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define V 5
5+
6+
int minKey(int key[], bool mstSet[])
7+
{
8+
9+
int min = INT_MAX, min_index;
10+
11+
for (int v = 0; v < V; v++)
12+
if (mstSet[v] == false && key[v] < min)
13+
min = key[v], min_index = v;
14+
15+
return min_index;
16+
}
17+
18+
void printMST(int parent[], int graph[V][V])
19+
{
20+
cout<<"Edge \tWeight\n";
21+
for (int i = 1; i < V; i++)
22+
cout<<parent[i]<<" - "<<i<<" \t"<<graph[i][parent[i]]<<" \n";
23+
}
24+
25+
26+
void primMST(int graph[V][V])
27+
{
28+
int parent[V];
29+
int key[V];
30+
bool mstSet[V];
31+
32+
for (int i = 0; i < V; i++)
33+
key[i] = INT_MAX, mstSet[i] = false;
34+
35+
key[0] = 0;
36+
parent[0] = -1;
37+
38+
for (int count = 0; count < V - 1; count++)
39+
{
40+
int u = minKey(key, mstSet);
41+
42+
mstSet[u] = true;
43+
44+
for (int v = 0; v < V; v++)
45+
46+
if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])
47+
parent[v] = u, key[v] = graph[u][v];
48+
}
49+
50+
printMST(parent, graph);
51+
}
52+
53+
int main()
54+
{
55+
int graph[V][V] = { { 0, 2, 0, 6, 0 },
56+
{ 2, 0, 3, 8, 5 },
57+
{ 0, 3, 0, 0, 7 },
58+
{ 6, 8, 0, 0, 9 },
59+
{ 0, 5, 7, 9, 0 } };
60+
61+
primMST(graph);
62+
63+
return 0;
64+
}
65+
66+
67+
/*
68+
Output:
69+
Edge Weight
70+
0 - 1 2
71+
1 - 2 3
72+
0 - 3 6
73+
1 - 4 5
74+
*/

0 commit comments

Comments
 (0)