102 lines
2.9 KiB
Java
102 lines
2.9 KiB
Java
/*This is a Java Program to Implement Warshall Transitive closure Algorithm. Warshall’s Transitive closure algorithm is used to determine if a path exists from vertex a to vertex b for all vertex pairs (a, b) in a graph.*/
|
||
|
||
/**
|
||
** Java Program to Implement Warshall Algorithm
|
||
**/
|
||
|
||
import java.util.Scanner;
|
||
|
||
/** Class Warshall **/
|
||
public class Warshall
|
||
{
|
||
private int V;
|
||
private boolean[][] tc;
|
||
/** Function to make the transitive closure **/
|
||
public void getTC(int[][] graph)
|
||
{
|
||
this.V = graph.length;
|
||
tc = new boolean[V][V];
|
||
for (int i = 0; i < V; i++)
|
||
{
|
||
for (int j = 0; j < V; j++)
|
||
if (graph[i][j] != 0)
|
||
tc[i][j] = true;
|
||
tc[i][i] = true;
|
||
}
|
||
for (int i = 0; i < V; i++)
|
||
{
|
||
for (int j = 0; j < V; j++)
|
||
{
|
||
if (tc[j][i])
|
||
for (int k = 0; k < V; k++)
|
||
if (tc[j][i] && tc[i][k])
|
||
tc[j][k] = true;
|
||
}
|
||
}
|
||
}
|
||
/** Funtion to display the trasitive closure **/
|
||
public void displayTC()
|
||
{
|
||
System.out.println("\nTransitive closure :\n");
|
||
System.out.print(" ");
|
||
for (int v = 0; v < V; v++)
|
||
System.out.print(" " + v );
|
||
System.out.println();
|
||
for (int v = 0; v < V; v++)
|
||
{
|
||
System.out.print(v +" ");
|
||
for (int w = 0; w < V; w++)
|
||
{
|
||
if (tc[v][w])
|
||
System.out.print(" * ");
|
||
else
|
||
System.out.print(" ");
|
||
}
|
||
System.out.println();
|
||
}
|
||
}
|
||
|
||
/** Main function **/
|
||
public static void main (String[] args)
|
||
{
|
||
Scanner scan = new Scanner(System.in);
|
||
System.out.println("Warshall Algorithm Test\n");
|
||
/** Make an object of Warshall class **/
|
||
Warshall w = new Warshall();
|
||
/** Accept number of vertices **/
|
||
System.out.println("Enter number of vertices\n");
|
||
int V = scan.nextInt();
|
||
/** get graph **/
|
||
System.out.println("\nEnter matrix\n");
|
||
int[][] graph = new int[V][V];
|
||
for (int i = 0; i < V; i++)
|
||
for (int j = 0; j < V; j++)
|
||
graph[i][j] = scan.nextInt();
|
||
w.getTC(graph);
|
||
w.displayTC();
|
||
}
|
||
}
|
||
|
||
/*
|
||
Enter number of vertices
|
||
|
||
6
|
||
|
||
Enter matrix
|
||
|
||
0 1 0 0 0 1
|
||
0 0 0 0 0 0
|
||
1 0 0 1 0 0
|
||
0 0 0 0 0 0
|
||
0 0 0 1 0 0
|
||
0 0 0 0 1 0
|
||
|
||
Transitive closure :
|
||
|
||
0 1 2 3 4 5
|
||
0 * * * * *
|
||
1 *
|
||
2 * * * * * *
|
||
3 *
|
||
4 * *
|
||
5 * * * |