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:
Convert String to Byte Array and Reverse in Java
Tips for dealing with HTTP-related problems
Java Program to Implement Stack API
A Guide to Java HashMap
Jackson – JsonMappingException (No serializer found for class)
Vấn đề Nhà sản xuất (Producer) – Người tiêu dùng (Consumer) và đồng bộ hóa các luồng trong Java
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Java Program to Find Strongly Connected Components in Graphs
Spring Cloud AWS – S3
Java Program to Implement AVL Tree
Java Program to Implement Lloyd’s Algorithm
Spring Boot - Cloud Configuration Client
Java Program to Implement Stack using Linked List
Tính kế thừa (Inheritance) trong java
Java Program to Implement Interval Tree
Hướng dẫn Java Design Pattern – Interpreter
Spring REST API + OAuth2 + Angular
Truyền giá trị và tham chiếu trong java
How to Delay Code Execution in Java
A Quick JUnit vs TestNG Comparison
Map Serialization and Deserialization with Jackson
Giới thiệu JDBC Connection Pool
Java – Write an InputStream to a File
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
How to Get a Name of a Method Being Executed?
The Difference Between Collection.stream().forEach() and Collection.forEach()
Java Program to Implement LinkedTransferQueue API
Adding Shutdown Hooks for JVM Applications
Check if a String is a Palindrome in Java
Java Program to Generate Random Numbers Using Multiply with Carry Method
Java Program to Implement CopyOnWriteArraySet API
Java Program to Implement Best-First Search