PrimsAlgorithm
Wed Nov 06 2024 16:45:38 GMT+0000 (Coordinated Universal Time)
Saved by @signin
import java.util.*;
public class PrimsAlgorithm {
// A utility method to print the resulting MST
public static void printMST(int[] parent, int[][] graph, int V) {
System.out.println("Edge \tWeight");
for (int i = 1; i < V; i++) {
System.out.println(parent[i] + " - " + i + "\t" + graph[i][parent[i]]);
}
}
// A utility method to find the vertex with the minimum key value
public static int minKey(int[] key, boolean[] mstSet, int V) {
int min = Integer.MAX_VALUE, minIndex = -1;
for (int v = 0; v < V; v++) {
if (!mstSet[v] && key[v] < min) {
min = key[v];
minIndex = v;
}
}
return minIndex;
}
// Function to implement Prim's algorithm
public static void primMST(int[][] graph, int V) {
// Array to store the MST
int[] parent = new int[V];
// Key values used to pick the minimum weight edge
int[] key = new int[V];
// To track vertices included in MST
boolean[] mstSet = new boolean[V];
// Initialize all keys as infinity and mstSet[] as false
Arrays.fill(key, Integer.MAX_VALUE);
Arrays.fill(mstSet, false);
key[0] = 0; // Start with the first vertex
parent[0] = -1; // The first node is the root of the MST
// Run Prim's algorithm
for (int count = 0; count < V - 1; count++) {
// Pick the minimum key vertex from the set of vertices not yet included in MST
int u = minKey(key, mstSet, V);
// Include the picked vertex in the MST set
mstSet[u] = true;
// Update key value and parent index of the adjacent vertices of the picked vertex
for (int v = 0; v < V; v++) {
// graph[u][v] is non-zero only for adjacent vertices of u
// mstSet[v] is false for vertices not yet included in MST
// Update the key and parent if the weight of edge u-v is less than the current key value of v
if (graph[u][v] != 0 && !mstSet[v] && graph[u][v] < key[v]) {
key[v] = graph[u][v];
parent[v] = u;
}
}
}
// Print the constructed MST
printMST(parent, graph, V);
}
public static void main(String[] args) {
// Input: number of vertices (V) and the graph as an adjacency matrix
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number of vertices: ");
int V = scanner.nextInt();
int[][] graph = new int[V][V];
System.out.println("Enter the adjacency matrix (use 0 for no edge):");
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
graph[i][j] = scanner.nextInt();
}
}
// Run Prim's algorithm to find the Minimum Spanning Tree
primMST(graph, V);
scanner.close();
}
}
i/p
Enter the number of vertices: 5
Enter the adjacency matrix (use 0 for no edge):
0 2 0 6 0
2 0 3 8 5
0 3 0 0 7
6 8 0 9 0
0 5 7 0 0
o/p
Edge Weight
0 - 1 2
1 - 2 3
0 - 3 6
1 - 4 5



Comments