Transitive closure of a graph Java
- Get link
- X
- Other Apps
PROGRAM TO FIND TRANSITIVE CLOSURE OF A GRAPH
import java.util.*;import java.lang.*;import java.io.*;class GraphClosure{ final static int V = 4; //Number of vertices in a graph // Prints transitive closure of graph[][] using Floyd // Warshall algorithm void transitiveClosure(int graph[][]) { /* reach[][] will be the output matrix that will finally have the shortest distances between every pair of vertices */ int reach[][] = new int[V][V]; int i, j, k; /* Initialize the solution matrix same as input graph matrix. Or we can say the initial values of shortest distances are based on shortest paths considering no intermediate vertex. */ for (i = 0; i < V; i++) for (j = 0; j < V; j++) reach[i][j] = graph[i][j]; /* Add all vertices one by one to the set of intermediate vertices. ---> Before start of a iteration, we have reachability values for all pairs of vertices such that the reachability values consider only the vertices in set {0, 1, 2, .. k-1} as intermediate vertices. ----> After the end of a iteration, vertex no. k is added to the set of intermediate vertices and the set becomes {0, 1, 2, .. k} */ for (k = 0; k < V; k++) { // Pick all vertices as source one by one for (i = 0; i < V; i++) { // Pick all vertices as destination for the // above picked source for (j = 0; j < V; j++) { // If vertex k is on a path from i to j, // then make sure that the value of reach[i][j] is 1 reach[i][j] = (reach[i][j]!=0) || ((reach[i][k]!=0) && (reach[k][j]!=0))?1:0; } } } // Print the shortest distance matrix printSolution(reach); } /* A utility function to print solution */ void printSolution(int reach[][]) { System.out.println("Following matrix is transitive closure"+ " of the given graph"); for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { if ( i == j) System.out.print("1 "); else System.out.print(reach[i][j]+" "); } System.out.println(); } } // Driver Code public static void main (String[] args) { /* Let us create the following weighted graph 10 (0)------->(3) | /|\ 5 | | | | 1 \|/ | (1)------->(2) 3 */ /* Let us create the following weighted graph 10 (0)------->(3) | /|\ 5 | | | | 1 \|/ | (1)------->(2) 3 */ int graph[][] = new int[][]{ {1, 1, 0, 1}, {0, 1, 1, 0}, {0, 0, 1, 1}, {0, 0, 0, 1} }; // Print the solution GraphClosure g = new GraphClosure(); g.transitiveClosure(graph); }}
OUTPUT:
Following matrix is transitiveclosure of the given graph 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1
- Get link
- X
- Other Apps
Comments
Post a Comment