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:
Weak References in Java
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Creating a Generic Array in Java
Spring Boot - Rest Template
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Receive email using IMAP
Java Program to Implement Coppersmith Freivald’s Algorithm
Java Program to Implement Segment Tree
Spring Boot Configuration with Jasypt
Registration – Password Strength and Rules
Java Program to Implement Shoelace Algorithm
Auditing with JPA, Hibernate, and Spring Data JPA
Java Program to Encode a Message Using Playfair Cipher
ETL with Spring Cloud Data Flow
Zipping Collections in Java
Error Handling for REST with Spring
Java Multi-line String
Lập trình hướng đối tượng (OOPs) trong java
Java Program to Check if a Given Binary Tree is an AVL Tree or Not
Java Program to Implement Hash Tables
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Cơ chế Upcasting và Downcasting trong java
Split a String in Java
Java Program to Implement Park-Miller Random Number Generation Algorithm
Java Program to Implement Knapsack Algorithm
Java Program to Implement Treap
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
Converting Between a List and a Set in Java
How to use the Spring FactoryBean?
Debugging Reactive Streams in Java
Java NIO2 Path API
A Guide to WatchService in Java NIO2