Java Program for Topological Sorting in Graphs

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:

Spring Boot: Customize the Jackson ObjectMapper
Wrapper Classes in Java
Java Program to Decode a Message Encoded Using Playfair Cipher
Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
Mix plain text and HTML content in a mail
Java Program to Implement Efficient O(log n) Fibonacci generator
Java Program to Implement RoleUnresolvedList API
Daemon Threads in Java
Xây dựng ứng dụng Client-Server với Socket trong Java
Java Program to Check the Connectivity of Graph Using DFS
Java Program to Check for balanced parenthesis by using Stacks
Apache Commons Collections OrderedMap
Spring Cloud – Securing Services
Java Program to Perform integer Partition for a Specific Case
HttpClient 4 – Send Custom Cookie
Java String Conversions
Simultaneous Spring WebClient Calls
Java Program to Find Transitive Closure of a Graph
Rate Limiting in Spring Cloud Netflix Zuul
Java Program to Implement Queue using Two Stacks
Spring 5 Functional Bean Registration
Java Program to Generate a Random Subset by Coin Flipping
Giới thiệu luồng vào ra (I/O) trong Java
Java Program to Find a Good Feedback Edge Set in a Graph
Quản lý bộ nhớ trong Java với Heap Space vs Stack
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Giới thiệu Google Guice – Injection, Scope
HttpClient Connection Management
Using the Map.Entry Java Class
Introduction to Spring Cloud CLI
Java Program to Implement Hash Tables Chaining with Binary Trees