Java Program to Implement Floyd-Warshall Algorithm

This Java program is to implement the Floyd-Warshall algorithm.The algorithm is a graph analysis algorithm for finding shortest paths in a weighted graph with positive or negative edge weights (but with no negative cycles) and also for finding transitive closure of a relation R.

Here is the source code of the Java program to implement Floyd-Warshall algorithm. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.

import java.util.Scanner;
 
public class FloydWarshall
{
    private int distancematrix[][];
    private int numberofvertices;
    public static final int INFINITY = 999;
 
    public FloydWarshall(int numberofvertices)
    {
        distancematrix = new int[numberofvertices + 1][numberofvertices + 1];
        this.numberofvertices = numberofvertices;
    }
 
    public void floydwarshall(int adjacencymatrix[][])
    {
        for (int source = 1; source <= numberofvertices; source++)
        {
            for (int destination = 1; destination <= numberofvertices; destination++)
            {
                distancematrix[destination] = adjacencymatrix[destination];
            }
        }
 
        for (int intermediate = 1; intermediate <= numberofvertices; intermediate++)
        {
            for (int source = 1; source <= numberofvertices; source++)
            {
                for (int destination = 1; destination <= numberofvertices; destination++)
                {
                    if (distancematrix[intermediate] + distancematrix[intermediate][destination]
                         < distancematrix[destination])
                        distancematrix[destination] = distancematrix[intermediate] 
                            + distancematrix[intermediate][destination];
                }
            }
        }
 
        for (int source = 1; source <= numberofvertices; source++)
            System.out.print("\t" + source);
 
        System.out.println();
        for (int source = 1; source <= numberofvertices; source++)
        {
            System.out.print(source + "\t");
            for (int destination = 1; destination <= numberofvertices; destination++)
            {
                System.out.print(distancematrix[destination] + "\t");
            }
            System.out.println();
        }
    }
 
    public static void main(String... arg)
    {
        int adjacency_matrix[][];
        int numberofvertices;
 
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the number of vertices");
        numberofvertices = scan.nextInt();
 
        adjacency_matrix = new int[numberofvertices + 1][numberofvertices + 1];
        System.out.println("Enter the Weighted Matrix for the graph");
        for (int source = 1; source <= numberofvertices; source++)
        {
            for (int destination = 1; destination <= numberofvertices; destination++)
            {
                adjacency_matrix[destination] = scan.nextInt();
                if (source == destination)
                {
                    adjacency_matrix[destination] = 0;
                    continue;
                }
                if (adjacency_matrix[destination] == 0)
                {
                    adjacency_matrix[destination] = INFINITY;
                }
            }
        }
 
        System.out.println("The Transitive Closure of the Graph");
        FloydWarshall floydwarshall = new FloydWarshall(numberofvertices);
        floydwarshall.floydwarshall(adjacency_matrix);
        scan.close();
    }
}
$javac FloydWarshall.java
$java FloydWarshall 
 
Enter the number of vertices
4
 
Enter the Weighted Matrix for the graph
0 0 3 0
2 0 0 0 
0 7 0 1
6 0 0 0
 
The Transitive Closure of the Graph
 
	1	2	3	4
1	0	10	3	4	
2	2	0	5	6	
3	7	7	0	1	
4	6	16	9	0

Related posts:

Java Program to Implement Bubble Sort
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Java Program for Douglas-Peucker Algorithm Implementation
Documenting a Spring REST API Using OpenAPI 3.0
Concurrent Test Execution in Spring 5
Giới thiệu Design Patterns
Java Program to Find the Connected Components of an UnDirected Graph
Java InputStream to String
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Spring Security Registration – Resend Verification Email
Spring Boot - Sending Email
Java Program to Implement Interpolation Search Algorithm
Sao chép các phần tử của một mảng sang mảng khác như thế nào?
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Hướng dẫn sử dụng String Format trong Java
Redirect to Different Pages after Login with Spring Security
Instance Profile Credentials using Spring Cloud
A Guide to Java HashMap
Practical Java Examples of the Big O Notation
Tips for dealing with HTTP-related problems
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Java 9 Stream API Improvements
Java Program to Generate a Graph for a Given Fixed Degree Sequence
New Features in Java 11
Java Program to Implement Max Heap
Java Program to Implement Rolling Hash
Encode/Decode to/from Base64
Java Program to Implement the String Search Algorithm for Short Text Sizes
Cơ chế Upcasting và Downcasting trong java
Mapping a Dynamic JSON Object with Jackson
Lập trình đa luồng với Callable và Future trong Java
How to Delay Code Execution in Java