This Java program,to perform the topological Sort on a given graph by the DFS method.The topological sort is performed on a directed acyclic graph.
Here is the source code of the Java program to perform the Topological Sort on the graph. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Stack;
public class TopologicalSort
{
private Stack<Integer> stack;
public TopologicalSort()
{
stack = new Stack<Integer>();
}
public int [] topological(int adjacency_matrix[][], int source) throws NullPointerException
{
int number_of_nodes = adjacency_matrix.length - 1;
int[] topological_sort = new int [number_of_nodes + 1];
int pos = 1;
int j ;
int visited[] = new int[number_of_nodes + 1];
int element = source;
int i = source;
visited = 1;
stack.push(source);
while (!stack.isEmpty())
{
element = stack.peek();
while (i <= number_of_nodes)
{
if (adjacency_matrix[element][i] == 1 && visited[i] == 1)
{
if (stack.contains(i))
{
System.out.println("TOPOLOGICAL SORT NOT POSSIBLE");
return null;
}
}
if (adjacency_matrix[element][i] == 1 && visited[i] == 0)
{
stack.push(i);
visited[i] = 1;
element = i;
i = 1;
continue;
}
i++;
}
j = stack.pop();
topological_sort[pos++] = j;
i = ++j;
}
return topological_sort;
}
public static void main(String...arg)
{
int number_no_nodes, source;
Scanner scanner = null;
int topological_sort[] = null;
try
{
System.out.println("Enter the number of nodes in the graph");
scanner = new Scanner(System.in);
number_no_nodes = scanner.nextInt();
int adjacency_matrix[][] = new int[number_no_nodes + 1][number_no_nodes + 1];
System.out.println("Enter the adjacency matrix");
for (int i = 1; i <= number_no_nodes; i++)
for (int j = 1; j <= number_no_nodes; j++)
adjacency_matrix[i][j] = scanner.nextInt();
System.out.println("Enter the source for the graph");
source = scanner.nextInt();
System.out.println("The Topological sort for the graph is given by ");
TopologicalSort toposort = new TopologicalSort();
topological_sort = toposort.topological(adjacency_matrix, source);
System.out.println();
for (int i = topological_sort.length - 1; i > 0; i-- )
{
if (topological_sort[i] != 0)
System.out.print(topological_sort[i]+"\t");
}
}catch(InputMismatchException inputMismatch)
{
System.out.println("Wrong Input format");
}catch(NullPointerException nullPointer)
{
}
scanner.close();
}
}
$javac TopologicalSort.java $java TopologicalSort Enter the number of nodes in the graph 4 Enter the adjacency matrix 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 Enter the source for the graph 1 The Topological sort for the graph is given by 1 2 4 3
Related posts:
Converting String to Stream of chars
Java Program to Implement Queue using Two Stacks
Java Program to Implement Hash Tree
Converting Between a List and a Set in Java
Java Program to implement Circular Buffer
Java Program to Implement Hash Trie
Convert Character Array to String in Java
Logging in Spring Boot
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
The XOR Operator in Java
Mix plain text and HTML content in a mail
Static Content in Spring WebFlux
Java Program to Generate All Possible Combinations Out of a, b, c, d, e
Java Program to Generate Random Numbers Using Middle Square Method
Spring Boot - Zuul Proxy Server and Routing
Java List UnsupportedOperationException
An Intro to Spring Cloud Zookeeper
Jackson – Change Name of Field
Fixing 401s with CORS Preflights and Spring Security
Spring REST API + OAuth2 + Angular
Lớp LinkedHashMap trong Java
LinkedHashSet trong java
New Features in Java 8
Java Program to Implement Interval Tree
Join and Split Arrays and Collections in Java
Giới thiệu thư viện Apache Commons Chain
Java Program to Find the Shortest Path from Source Vertex to All Other Vertices in Linear Time
Guide to the Java Clock Class
Java Program to Implement Doubly Linked List
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Java IO vs NIO
Java Program to Solve a Matching Problem for a Given Specific Case