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:
Introduction to Spring Cloud Stream
HashMap trong Java hoạt động như thế nào?
Hướng dẫn sử dụng Lớp FilePermission trong java
Spring Cloud – Bootstrapping
Java Program to Implement Binary Heap
New Features in Java 12
HttpClient 4 – Follow Redirects for POST
Generic Constructors in Java
JUnit 5 for Kotlin Developers
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
A Guide to Java SynchronousQueue
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Java Program to Generate a Random Subset by Coin Flipping
Guide to the Synchronized Keyword in Java
Spring Data JPA @Modifying Annotation
Java Program to implement Bit Set
Receive email using IMAP
Abstract class và Interface trong Java
wait() and notify() Methods in Java
Handling Errors in Spring WebFlux
Java Program to Implement Sorted Vector
Java Program to Implement TreeSet API
Rest Web service: Filter và Interceptor với Jersey 2.x (P1)
How to Define a Spring Boot Filter?
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Java Program to Implement SimpeBindings API
A Quick JUnit vs TestNG Comparison
Java Program to Implement Fermat Primality Test Algorithm
@DynamicUpdate with Spring Data JPA
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Introduction to Spring Data JDBC
Hướng dẫn Java Design Pattern – Observer