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:
Receive email using IMAP
Dockerizing a Spring Boot Application
Java – File to Reader
Using a Spring Cloud App Starter
Show Hibernate/JPA SQL Statements from Spring Boot
New Features in Java 13
Filtering and Transforming Collections in Guava
Hướng dẫn Java Design Pattern – Iterator
Java Program to Implement Knight’s Tour Problem
Java Program to Implement Tarjan Algorithm
Spring MVC Async vs Spring WebFlux
Concatenating Strings In Java
Spring Boot - Tomcat Port Number
Guide to CountDownLatch in Java
Java Program to Check Whether a Given Point is in a Given Polygon
Wiring in Spring: @Autowired, @Resource and @Inject
Java Program to Use rand and srand Functions
Map to String Conversion in Java
A Guide to Java SynchronousQueue
Java Program to Implement Bucket Sort
Java – Try with Resources
Supplier trong Java 8
Java Program to Find Maximum Element in an Array using Binary Search
Copy a List to Another List in Java
Beans and Dependency Injection
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Test a REST API with Java
Java Program to Find Minimum Number of Edges to Cut to make the Graph Disconnected
REST Web service: Upload và Download file với Jersey 2.x
Java Switch Statement
Java Program to Check whether Directed Graph is Connected using DFS