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:
Java Program to Implement Interpolation Search Algorithm
Java Program to Implement Ternary Search Tree
Java Program to Represent Graph Using Incidence Matrix
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Implement Warshall Algorithm
The HttpMediaTypeNotAcceptableException in Spring MVC
The StackOverflowError in Java
Java Program to Implement Heap
Assertions in JUnit 4 and JUnit 5
4 tính chất của lập trình hướng đối tượng trong Java
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers
Server-Sent Events in Spring
Hướng dẫn Java Design Pattern – Composite
Quick Guide to the Java StringTokenizer
Changing Annotation Parameters At Runtime
Introduction to the Functional Web Framework in Spring 5
Spring’s RequestBody and ResponseBody Annotations
Java Optional as Return Type
Spring WebFlux Filters
Constructor Injection in Spring with Lombok
Java Program to Check if an UnDirected Graph is a Tree or Not Using DFS
Simplify the DAO with Spring and Java Generics
The Basics of Java Security
Java Program to Check Cycle in a Graph using Topological Sort
Login For a Spring Web App – Error Handling and Localization
Introduction to Spring Data JDBC
Getting the Size of an Iterable in Java
Java Program to Implement Bresenham Line Algorithm
Custom HTTP Header with the HttpClient
Convert XML to JSON Using Jackson
Getting Started with GraphQL and Spring Boot
Java Program to Perform Polygon Containment Test