This Java program is to find the transitive closure of a graph.Given a directed graph, find out if a vertex j is reachable from another vertex i for all vertex pairs (i, j) in the given graph. Here reachable mean that there is a path from vertex i to j. The reach-ability matrix is called transitive closure of a graph.
Here is the source code of the Java program to find the transitive closure of graph. 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 TransitiveClosure
{
private int transitiveMatrix[][];
private int numberofvertices;
public static final int INFINITY = 999;
public TransitiveClosure(int numberofvertices)
{
transitiveMatrix= new int[numberofvertices + 1][numberofvertices + 1];
this.numberofvertices = numberofvertices;
}
public void transitiveClosure(int adjacencymatrix[][])
{
for (int source = 1; source <= numberofvertices; source++)
{
for (int destination = 1; destination <= numberofvertices; destination++)
{
transitiveMatrix[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 (transitiveMatrix[intermediate] + transitiveMatrix[intermediate][destination]
< transitiveMatrix[destination])
transitiveMatrix[destination] = transitiveMatrix[intermediate]
+ transitiveMatrix[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(transitiveMatrix[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");
TransitiveClosure transitiveClosure = new TransitiveClosure(numberofvertices);
transitiveClosure.transitiveClosure(adjacency_matrix);
scan.close();
}
}
$javac TransitiveClosure.java $java TransitiveClosure 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:
OAuth2 for a Spring REST API – Handle the Refresh Token in AngularJS
Java Program to Implement Suffix Tree
An Intro to Spring Cloud Task
Sử dụng CyclicBarrier trong Java
Validations for Enum Types
A Guide to Apache Commons Collections CollectionUtils
Spring Boot - Introduction
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Java Program to Implement Knapsack Algorithm
Java Program to Give an Implementation of the Traditional Chinese Postman Problem
Comparing Dates in Java
Java Program to Implement Triply Linked List
Introduction to Liquibase Rollback
Java Program to Apply Above-Below-on Test to Find the Position of a Point with respect to a Line
Java – Reader to Byte Array
MyBatis with Spring
Java Program to Implement Multi-Threaded Version of Binary Search Tree
Spring Boot - Quick Start
Java Web Services – JAX-WS – SOAP
Java Program to Find the Minimum value of Binary Search Tree
Finding articulation points in a graph in $O(N+M)$
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
Receive email using IMAP
Hướng dẫn Java Design Pattern – Interpreter
Ép kiểu trong Java (Type casting)
Jackson – Unmarshall to Collection/Array
Ways to Iterate Over a List in Java
Hướng dẫn tạo và sử dụng ThreadPool trong Java
A Guide to Concurrent Queues in Java
Java Program to Implement Interval Tree
How to Use if/else Logic in Java 8 Streams
Java Program to Implement Sparse Array