Skip to content

Commit 351c510

Browse files
prims_algo.c
1 parent 66cc3d0 commit 351c510

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Diff for: prims_algo.c

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include <stdio.h>
2+
#include <limits.h>
3+
#define V_MAX 100
4+
int minKey(int key[], int mstSet[], int V)
5+
{
6+
int min = INT_MAX, min_index;
7+
for (int v = 0; v < V; v++)
8+
if (mstSet[v] == 0 && key[v] < min)
9+
min = key[v], min_index = v;
10+
return min_index;
11+
}
12+
void printMST(int parent[], int n, int graph[V_MAX][V_MAX], int V)
13+
{
14+
printf("Edge Weight\n");
15+
for (int i = 1; i < V; i++)
16+
printf("%d - %d %d \n", parent[i], i, graph[i][parent[i]]);
17+
}
18+
void primMST(int graph[][V_MAX], int V)
19+
{
20+
int parent[V_MAX];
21+
int key[V_MAX];
22+
int mstSet[V_MAX];
23+
for (int i = 0; i < V; i++)
24+
key[i] = INT_MAX, mstSet[i] = 0;
25+
key[0] = 0;
26+
parent[0] = -1;
27+
for (int count = 0; count < V - 1; count++)
28+
{
29+
int u = minKey(key, mstSet, V);
30+
mstSet[u] = 1;
31+
for (int v = 0; v < V; v++)
32+
if (graph[u][v] && mstSet[v] == 0 && graph[u][v] < key[v])
33+
parent[v] = u, key[v] = graph[u][v];
34+
}
35+
printMST(parent, V, graph, V);
36+
}
37+
int main()
38+
{
39+
int V, E;
40+
printf("Enter the number of vertices and edges: ");
41+
scanf("%d %d", &V, &E);
42+
int graph[V_MAX][V_MAX];
43+
for (int i = 0; i < V; i++)
44+
{
45+
for (int j = 0; j < V; j++)
46+
{
47+
graph[i][j] = 0;
48+
}
49+
}
50+
printf("Enter the source vertex, destination vertex, and weight for each edge:\n");
51+
for (int i = 0; i < E; i++)
52+
{
53+
int source, dest, weight;
54+
scanf("%d %d %d", &source, &dest, &weight);
55+
graph[source][dest] = weight;
56+
graph[dest][source] = weight;
57+
}
58+
primMST(graph, V);
59+
return 0;
60+
}

0 commit comments

Comments
 (0)