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 Find a Good Feedback Vertex Set
Guide to Java 8 groupingBy Collector
Java Program to Implement ConcurrentSkipListMap API
Java Program to find the peak element of an array using Binary Search approach
Check if there is mail waiting
Jackson Annotation Examples
The Spring @Controller and @RestController Annotations
Java Program to Implement Find all Forward Edges in a Graph
Java Program to Find Number of Articulation points in a Graph
Implementing a Runnable vs Extending a Thread
Java Program to Implement Floyd Cycle Algorithm
Using JWT with Spring Security OAuth (legacy stack)
Working with Network Interfaces in Java
Loại bỏ các phần tử trùng trong một ArrayList như thế nào trong Java 8?
Clique in the Divisibility Graph
Introduction to Using FreeMarker in Spring MVC
Hướng dẫn sử dụng lớp Console trong java
ArrayList trong java
Netflix Archaius with Various Database Configurations
Java Program to Check whether Graph is a Bipartite using BFS
Guide to Apache Commons CircularFifoQueue
Wiring in Spring: @Autowired, @Resource and @Inject
Guide to Spring @Autowired
Spring’s RequestBody and ResponseBody Annotations
Java Program to Perform Addition Operation Using Bitwise Operators
A Guide to the Java ExecutorService
How to Delay Code Execution in Java
Java Program to Solve Travelling Salesman Problem for Unweighted Graph
Java Program to Implement Triply Linked List
Java Program to Implement Ternary Search Algorithm
Guava CharMatcher
Spring WebClient and OAuth2 Support