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:
The Spring @Controller and @RestController Annotations
Tính trừu tượng (Abstraction) trong Java
How to Get the Last Element of a Stream in Java?
Intro to Inversion of Control and Dependency Injection with Spring
Creating a Generic Array in Java
Spring Security OAuth Login with WebFlux
Spring Boot With H2 Database
Server-Sent Events in Spring
Java Program to Solve a Matching Problem for a Given Specific Case
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Java – Reader to String
Receive email using POP3
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
How to Count Duplicate Elements in Arraylist
Iterating over Enum Values in Java
Guide to java.util.concurrent.BlockingQueue
Java Program to Implement Stack
Java Program to Implement a Binary Search Algorithm for a Specific Search Sequence
Java Program to Implement Sorted Circular Doubly Linked List
Giới thiệu Design Patterns
Guide to the Volatile Keyword in Java
Wrapper Classes in Java
Java Program to find the maximum subarray sum O(n^2) time(naive method)
Spring Boot - Cloud Configuration Client
Guide to Guava Multimap
Spring Security Form Login
Spring WebFlux Filters
Java – Reader to InputStream
The Registration API becomes RESTful
Java Program to Implement Skew Heap
Java Program to Implement Cubic convergence 1/pi Algorithm
Arrays.asList vs new ArrayList(Arrays.asList())