Java Program to Check Cycle in a Graph using Topological Sort

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 Program to Implement the Alexander Bogomolny’s UnOrdered Permutation Algorithm for Elements Fro...
Spring Boot - Cloud Configuration Server
Hướng dẫn Java Design Pattern – Transfer Object
Java Program to Implement Repeated Squaring Algorithm
Hướng dẫn Java Design Pattern – Dependency Injection
Java Program to Implement D-ary-Heap
HttpAsyncClient Tutorial
Spring Cloud AWS – RDS
Java Program to Implement Find all Back Edges in a Graph
Java Program to Generate a Sequence of N Characters for a Given Specific Case
Java Program to Compute the Volume of a Tetrahedron Using Determinants
Java Concurrency Interview Questions and Answers
Java Program to Implement Heap’s Algorithm for Permutation of N Numbers
How to Remove the Last Character of a String?
TreeSet và sử dụng Comparable, Comparator trong java
Registration – Activate a New Account by Email
Spring Autowiring of Generic Types
Java Program to Permute All Letters of an Input String
Introduction to Spring Data MongoDB
How to Return 404 with Spring WebFlux
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Fixing 401s with CORS Preflights and Spring Security
Java Program to Implement Floyd-Warshall Algorithm
Java Program to Generate All Possible Combinations of a Given List of Numbers
Tránh lỗi NullPointerException trong Java như thế nào?
Spring Security – security none, filters none, access permitAll
The Difference Between map() and flatMap()
Java Program to Sort an Array of 10 Elements Using Heap Sort Algorithm
Intro to Inversion of Control and Dependency Injection with Spring
Custom Exception trong Java
Guide to Dynamic Tests in Junit 5
DynamoDB in a Spring Boot Application Using Spring Data