This is a java program to find shortest path from a single vertex. The Bellman–Ford algorithm is an algorithm that computes shortest paths from a single source vertex to all of the other vertices in a weighted digraph.[1] It is slower than Dijkstra’s algorithm for the same problem, but more versatile, as it is capable of handling graphs in which some of the edge weights are negative numbers.
Here is the source code of the Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path Between Two Vertices Assuming that Negative Size Edges Exist in the Graph. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.maixuanviet.graph; import java.util.Scanner; public class BellmanFord { private int distances[]; private int numberofvertices; public static final int MAX_VALUE = 999; public BellmanFord(int numberofvertices) { this.numberofvertices = numberofvertices; distances = new int[numberofvertices + 1]; } public void BellmanFordEvaluation(int source, int destination, int adjacencymatrix[][]) { for (int node = 1; node <= numberofvertices; node++) { distances[node] = MAX_VALUE; } distances = 0; for (int node = 1; node <= numberofvertices - 1; node++) { for (int sourcenode = 1; sourcenode <= numberofvertices; sourcenode++) { for (int destinationnode = 1; destinationnode <= numberofvertices; destinationnode++) { if (adjacencymatrix[sourcenode][destinationnode] != MAX_VALUE) { if (distances[destinationnode] > distances[sourcenode] + adjacencymatrix[sourcenode][destinationnode]) distances[destinationnode] = distances[sourcenode] + adjacencymatrix[sourcenode][destinationnode]; } } } } for (int sourcenode = 1; sourcenode <= numberofvertices; sourcenode++) { for (int destinationnode = 1; destinationnode <= numberofvertices; destinationnode++) { if (adjacencymatrix[sourcenode][destinationnode] != MAX_VALUE) { if (distances[destinationnode] > distances[sourcenode] + adjacencymatrix[sourcenode][destinationnode]) System.out .println("The Graph contains negative egde cycle"); } } } for (int vertex = 1; vertex <= numberofvertices; vertex++) { if (vertex == destination) System.out.println("distance of source " + source + " to " + vertex + " is " + distances[vertex]); } } public static void main(String... arg) { int numberofvertices = 0; int source, destination; Scanner scanner = new Scanner(System.in); System.out.println("Enter the number of vertices"); numberofvertices = scanner.nextInt(); int adjacencymatrix[][] = new int[numberofvertices + 1][numberofvertices + 1]; System.out.println("Enter the adjacency matrix"); for (int sourcenode = 1; sourcenode <= numberofvertices; sourcenode++) { for (int destinationnode = 1; destinationnode <= numberofvertices; destinationnode++) { adjacencymatrix[sourcenode][destinationnode] = scanner .nextInt(); if (sourcenode == destinationnode) { adjacencymatrix[sourcenode][destinationnode] = 0; continue; } if (adjacencymatrix[sourcenode][destinationnode] == 0) { adjacencymatrix[sourcenode][destinationnode] = MAX_VALUE; } } } System.out.println("Enter the source vertex"); source = scanner.nextInt(); System.out.println("Enter the destination vertex: "); destination = scanner.nextInt(); BellmanFord bellmanford = new BellmanFord(numberofvertices); bellmanford.BellmanFordEvaluation(source, destination, adjacencymatrix); scanner.close(); } }
Output:
$ javac BellmanFord.java $ java BellmanFord Output: Enter the number of vertices 6 Enter the adjacency matrix 0 4 0 0 -1 0 0 0 -1 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 0 3 0 0 0 0 0 0 Enter the source vertex 1 Enter the destination vertex: 4 distance of source 1 to 4 is -6
Related posts:
Spring Security Remember Me
How to Manually Authenticate User with Spring Security
Lớp TreeMap trong Java
Handle EML file with JavaMail
Multi Dimensional ArrayList in Java
Serve Static Resources with Spring
Java Program to Implement IdentityHashMap API
Java Program to Implement ConcurrentLinkedQueue API
Java Program to Implement Strassen Algorithm
Java Program to Check Whether Topological Sorting can be Performed in a Graph
Spring Boot - Creating Docker Image
Java Map With Case-Insensitive Keys
Spring Security Authentication Provider
Introduction to Apache Commons Text
Java Program to find the maximum subarray sum using Binary Search approach
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Guide to Selenium with JUnit / TestNG
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
Spring Data Reactive Repositories with MongoDB
Spring Data JPA and Null Parameters
Java Program to Implement LinkedHashSet API
Tips for dealing with HTTP-related problems
Java Program to Generate N Number of Passwords of Length M Each
Extract links from an HTML page
Derived Query Methods in Spring Data JPA Repositories
Java Program to Implement Fermat Factorization Algorithm
Java Program to Implement Insertion Sort
Java Program to Implement Horner Algorithm
Removing Elements from Java Collections
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
Java Program to Check whether Directed Graph is Connected using DFS
Guide to the ConcurrentSkipListMap