This Java program is to Implement weighted graph and find shortest path from one source vertex to every other vertex. Dijkstra’s Algorithm can be used to achieve this goal.
Here is the source code of the Java Program to Find the Shortest Path from Source Vertex to All Other Vertices in Linear Time. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a java program to find the shortest path from one vertex to all other vertex
import java.util.HashSet;
import java.util.InputMismatchException;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class Shortest_Path_to_AllVertex
{
private int distances[];
private Set<Integer> settled;
private Set<Integer> unsettled;
private int number_of_nodes;
private int adjacencyMatrix[][];
public Shortest_Path_to_AllVertex(int number_of_nodes)
{
this.number_of_nodes = number_of_nodes;
distances = new int[number_of_nodes + 1];
settled = new HashSet<Integer>();
unsettled = new HashSet<Integer>();
adjacencyMatrix = new int[number_of_nodes + 1][number_of_nodes + 1];
}
public void shortestPath(int adjacency_matrix[][], int source)
{
int evaluationNode;
for (int i = 1; i <= number_of_nodes; i++)
for (int j = 1; j <= number_of_nodes; j++)
adjacencyMatrix[i][j] = adjacency_matrix[i][j];
for (int i = 1; i <= number_of_nodes; i++)
{
distances[i] = Integer.MAX_VALUE;
}
unsettled.add(source);
distances = 0;
while (!unsettled.isEmpty())
{
evaluationNode = getNodeWithMinimumDistanceFromUnsettled();
unsettled.remove(evaluationNode);
settled.add(evaluationNode);
evaluateNeighbours(evaluationNode);
}
}
private int getNodeWithMinimumDistanceFromUnsettled()
{
int min;
int node = 0;
Iterator<Integer> iterator = unsettled.iterator();
node = iterator.next();
min = distances[node];
for (int i = 1; i <= distances.length; i++)
{
if (unsettled.contains(i))
{
if (distances[i] <= min)
{
min = distances[i];
node = i;
}
}
}
return node;
}
private void evaluateNeighbours(int evaluationNode)
{
int edgeDistance = -1;
int newDistance = -1;
for (int destinationNode = 1; destinationNode <= number_of_nodes; destinationNode++)
{
if (!settled.contains(destinationNode))
{
if (adjacencyMatrix[evaluationNode][destinationNode] != Integer.MAX_VALUE)
{
edgeDistance = adjacencyMatrix[evaluationNode][destinationNode];
newDistance = distances[evaluationNode] + edgeDistance;
if (newDistance < distances[destinationNode])
{
distances[destinationNode] = newDistance;
}
unsettled.add(destinationNode);
}
}
}
}
public static void main(String... arg)
{
int adjacency_matrix[][];
int number_of_vertices;
int source = 0;
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] = Integer.MAX_VALUE;
}
}
}
System.out.println("Enter the source ");
source = scan.nextInt();
Shortest_Path_to_AllVertex sp = new Shortest_Path_to_AllVertex(
number_of_vertices);
sp.shortestPath(adjacency_matrix, source);
System.out.println("The Shorted Path from " + source
+ " to all other nodes are: ");
for (int i = 1; i <= sp.distances.length - 1; i++)
{
System.out.println(source + " to " + i + " is "
+ sp.distances[i]);
}
} catch (InputMismatchException inputMismatch)
{
System.out.println("Wrong Input Format");
}
scan.close();
}
}
Output:
$ javac Shortest_Path_to_AllVertex.java $ java Shortest_Path_to_AllVertex Enter the number of vertices 5 Enter the Weighted Matrix for the graph 0 9 6 5 3 0 0 0 0 0 0 2 0 4 0 0 0 0 0 0 0 0 0 0 0 Enter the source 1 The Shorted Path from 1 to all other nodes are: 1 to 1 is 0 1 to 2 is 8 1 to 3 is 6 1 to 4 is 5 1 to 5 is 3
Related posts:
Spring Cloud – Bootstrapping
Spring Webflux and CORS
Apache Commons Collections BidiMap
Java Program to Implement a Binary Search Tree using Linked Lists
Guava CharMatcher
Using Optional with Jackson
Returning Image/Media Data with Spring MVC
How to Read a File in Java
A Quick Guide to Spring Cloud Consul
Lớp Collectors trong Java 8
Spring Data JPA Delete and Relationships
Introduction to Liquibase Rollback
Java Program to Implement Triply Linked List
Queue và PriorityQueue trong Java
Using a Spring Cloud App Starter
Java Program to Implement the Vigenere Cypher
Comparing Long Values in Java
Intro to Spring Boot Starters
Hướng dẫn tạo và sử dụng ThreadPool trong Java
Java Program to Find Inverse of a Matrix
Lớp LinkedHashMap trong Java
Spring Boot - Tracing Micro Service Logs
Java Program to Implement Gift Wrapping Algorithm in Two Dimensions
Validations for Enum Types
Getting Started with Forms in Spring MVC
Java Program to Delete a Particular Node in a Tree Without Using Recursion
Working with Kotlin and JPA
Guide to Spring 5 WebFlux
Connect through a Proxy
Sử dụng Fork/Join Framework với ForkJoinPool trong Java
Java Program to Implement Find all Forward Edges in a Graph
Java Program to Construct an Expression Tree for an Postfix Expression