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 check for cycle in topological sort. 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 TopoCycle
{
private Stack<Integer> stack;
public TopoCycle()
{
stack = new Stack<Integer>();
}
public boolean checkCycle(int adjacency_matrix[][], int source)
{
int number_of_nodes = adjacency_matrix.length - 1;
int[] topological_sort = new int [number_of_nodes + 1];
int pos = 1;
int j;
boolean cycle = false;
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("The Graph Contains a cycle");
cycle = true;
return cycle;
}
}
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;
}
System.out.println("The Graph does not Contain cycle");
return cycle;
}
public static void main(String...arg)
{
int number_no_nodes, source;
Scanner scanner = 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();
TopoCycle topoCycle = new TopoCycle();
topoCycle.checkCycle(adjacency_matrix, source);
}catch(InputMismatchException inputMismatch)
{
System.out.println("Wrong Input format");
}
scanner.close();
}
}
$javac TopoCycle.java $java TopoCycle Enter the number of nodes in the graph 5 Enter the adjacency matrix 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 Enter the source for the graph 1 The Graph contains a cycle
Related posts:
Java – Convert File to InputStream
Documenting a Spring REST API Using OpenAPI 3.0
Binary Numbers in Java
Converting String to Stream of chars
Hướng dẫn sử dụng Java Reflection
Testing an OAuth Secured API with Spring MVC
Spring Boot Change Context Path
Guide to BufferedReader
Java Program to Implement Park-Miller Random Number Generation Algorithm
Java Program to Implement Stein GCD Algorithm
Đồng bộ hóa các luồng trong Java
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
Marker Interface trong Java
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Introduction to Spliterator in Java
Java Streams vs Vavr Streams
Java Program to Perform Partial Key Search in a K-D Tree
Cài đặt và sử dụng Swagger UI
Serialize Only Fields that meet a Custom Criteria with Jackson
Overflow and Underflow in Java
Java Program to Implement Pagoda
Java – Try with Resources
How to Get a Name of a Method Being Executed?
“Stream has already been operated upon or closed” Exception in Java
LIKE Queries in Spring JPA Repositories
Java – InputStream to Reader
Hướng dẫn Java Design Pattern – Transfer Object
Giới thiệu JDBC Connection Pool
Consumer trong Java 8
Annotation trong Java 8
Java Program to Perform Arithmetic Operations on Numbers of Size
Java Program to Implement AA Tree