This Java program is to find MST using Prim’s algorithm.In computer science, Prim’s algorithm is a greedy algorithm that finds a minimum spanning tree for a connected weighted undirected graph. This means it finds a subset of the edges that forms a tree that includes every vertex, where the total weight of all the edges in the tree is minimized.
Here is the source code of the Java program to find MST using prim’s algorithm. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.
import java.util.InputMismatchException;
import java.util.Scanner;
public class Prims
{
private boolean unsettled[];
private boolean settled[];
private int numberofvertices;
private int adjacencyMatrix[][];
private int key[];
public static final int INFINITE = 999;
private int parent[];
public Prims(int numberofvertices)
{
this.numberofvertices = numberofvertices;
unsettled = new boolean[numberofvertices + 1];
settled = new boolean[numberofvertices + 1];
adjacencyMatrix = new int[numberofvertices + 1][numberofvertices + 1];
key = new int[numberofvertices + 1];
parent = new int[numberofvertices + 1];
}
public int getUnsettledCount(boolean unsettled[])
{
int count = 0;
for (int index = 0; index < unsettled.length; index++)
{
if (unsettled[index])
{
count++;
}
}
return count;
}
public void primsAlgorithm(int adjacencyMatrix[][])
{
int evaluationVertex;
for (int source = 1; source <= numberofvertices; source++)
{
for (int destination = 1; destination <= numberofvertices; destination++)
{
this.adjacencyMatrix[destination] = adjacencyMatrix[destination];
}
}
for (int index = 1; index <= numberofvertices; index++)
{
key[index] = INFINITE;
}
key[1] = 0;
unsettled[1] = true;
parent[1] = 1;
while (getUnsettledCount(unsettled) != 0)
{
evaluationVertex = getMimumKeyVertexFromUnsettled(unsettled);
unsettled[evaluationVertex] = false;
settled[evaluationVertex] = true;
evaluateNeighbours(evaluationVertex);
}
}
private int getMimumKeyVertexFromUnsettled(boolean[] unsettled2)
{
int min = Integer.MAX_VALUE;
int node = 0;
for (int vertex = 1; vertex <= numberofvertices; vertex++)
{
if (unsettled[vertex] == true && key[vertex] < min)
{
node = vertex;
min = key[vertex];
}
}
return node;
}
public void evaluateNeighbours(int evaluationVertex)
{
for (int destinationvertex = 1; destinationvertex <= numberofvertices; destinationvertex++)
{
if (settled[destinationvertex] == false)
{
if (adjacencyMatrix[evaluationVertex][destinationvertex] != INFINITE)
{
if (adjacencyMatrix[evaluationVertex][destinationvertex] < key[destinationvertex])
{
key[destinationvertex] = adjacencyMatrix[evaluationVertex][destinationvertex];
parent[destinationvertex] = evaluationVertex;
}
unsettled[destinationvertex] = true;
}
}
}
}
public void printMST()
{
System.out.println("SOURCE : DESTINATION = WEIGHT");
for (int vertex = 2; vertex <= numberofvertices; vertex++)
{
System.out.println(parent[vertex] + "\t:\t" + vertex +"\t=\t"+ adjacencyMatrix[parent[vertex]][vertex]);
}
}
public static void main(String... arg)
{
int adjacency_matrix[][];
int number_of_vertices;
Scanner scan = new Scanner(System.in);
try
{
System.out.println("Enter the number of vertices");
number_of_vertices = scan.nextInt();
adjacency_matrix = new int[number_of_vertices + 1][number_of_vertices + 1];
System.out.println("Enter the Weighted Matrix for the graph");
for (int i = 1; i <= number_of_vertices; i++)
{
for (int j = 1; j <= number_of_vertices; j++)
{
adjacency_matrix[i][j] = scan.nextInt();
if (i == j)
{
adjacency_matrix[i][j] = 0;
continue;
}
if (adjacency_matrix[i][j] == 0)
{
adjacency_matrix[i][j] = INFINITE;
}
}
}
Prims prims = new Prims(number_of_vertices);
prims.primsAlgorithm(adjacency_matrix);
prims.printMST();
} catch (InputMismatchException inputMismatch)
{
System.out.println("Wrong Input Format");
}
scan.close();
}
}
$javac Prims.java $java Prims Enter the number of vertices 5 Enter the Weighted Matrix for the graph 0 4 0 0 5 4 0 3 6 1 0 3 0 6 2 0 6 6 0 7 5 1 2 7 0 SOURCE : DESTINATION = WEIGHT 1 : 2 = 4 5 : 3 = 2 2 : 4 = 6 2 : 5 = 1
Related posts:
Composition, Aggregation, and Association in Java
Lớp HashMap trong Java
Java Program to Perform Inorder Recursive Traversal of a Given Binary Tree
CharSequence vs. String in Java
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Ép kiểu trong Java (Type casting)
Guide to Java 8’s Collectors
Java Program to Perform Sorting Using B-Tree
Java Program to Implement Variable length array
Jackson vs Gson
Java Program to Convert a Decimal Number to Binary Number using Stacks
Extract links from an HTML page
Java Program to Implement Hopcroft Algorithm
Java Program to Perform Searching in a 2-Dimension K-D Tree
Java Scanner hasNext() vs. hasNextLine()
Java Program to Implement Disjoint Set Data Structure
Java Program to Implement the Vigenere Cypher
Hướng dẫn Java Design Pattern – Object Pool
Spring Data MongoDB – Indexes, Annotations and Converters
Java Program to find the maximum subarray sum using Binary Search approach
Hướng dẫn Java Design Pattern – Template Method
Send an email using the SMTP protocol
Fixing 401s with CORS Preflights and Spring Security
Introduction to Java Serialization
Java Program to Implement Pagoda
Java Program to Implement Caesar Cypher
OAuth2 for a Spring REST API – Handle the Refresh Token in AngularJS
Serialize Only Fields that meet a Custom Criteria with Jackson
Logging in Spring Boot
How to Delay Code Execution in Java
Apache Camel with Spring Boot
Deque và ArrayDeque trong Java