Java Program to Create a Random Linear Extension for a DAG

This is a java program to create a random linear extension of DAG. Linear extension of DAG is nothing but topological sorting in simple terms.

Here is the source code of the Java Program to Create a Random Linear Extension for a DAG. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

package com.maixuanviet.graph;
 
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Stack;
 
public class DAGLinearExtension
{
    private Stack<Integer> stack;
 
    public DAGLinearExtension()
    {
        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;
        System.out
                .println("Linear extension of a DAG is its topological reperesentation.");
        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 ");
            DAGLinearExtension toposort = new DAGLinearExtension();
            topological_sort = toposort.topological(adjacency_matrix, source);
            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();
    }
}

Output:

$ javac DAGLinearExtension.java
$ java DAGLinearExtension
 
Linear extension of a DAG is its topological reperesentation.
Enter the number of nodes in the graph
6
Enter the adjacency matrix
0 1 0 0 0 1
0 0 1 1 0 0
0 0 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 0 1 0 0 0 
Enter the source for the graph
1
The Topological sort for the graph is given by 
1	2	4	5	6	3

Related posts:

Tips for dealing with HTTP-related problems
ClassNotFoundException vs NoClassDefFoundError
Giới thiệu Design Patterns
XML Serialization and Deserialization with Jackson
Java Program to Test Using DFS Whether a Directed Graph is Strongly Connected or Not
Notify User of Login From New Device or Location
Wiring in Spring: @Autowired, @Resource and @Inject
Java Program to Implement Efficient O(log n) Fibonacci generator
Generate Spring Boot REST Client with Swagger
Java – InputStream to Reader
Java CyclicBarrier vs CountDownLatch
Spring MVC Setup with Kotlin
Java Program to Implement Cartesian Tree
Java Program to Compute Cross Product of Two Vectors
Java List UnsupportedOperationException
Hướng dẫn Java Design Pattern – Visitor
Spring Boot - Build Systems
Hướng dẫn Java Design Pattern – Chain of Responsibility
JWT – Token-based Authentication trong Jersey 2.x
List Interface trong Java
Period and Duration in Java
Java Program to Find Inverse of a Matrix
Java Program to Perform Deletion in a BST
An Intro to Spring Cloud Task
Java Program to Implement the Checksum Method for Small String Messages and Detect
REST Web service: HTTP Status Code và xử lý ngoại lệ RESTful web service với Jersey 2.x
Introduction to Netflix Archaius with Spring Cloud
Java Program to Implement ArrayList API
Spring Boot - Rest Controller Unit Test
Spring Security Basic Authentication
Java Program to Generate All Possible Combinations of a Given List of Numbers
Java Program to Find Nearest Neighbor Using Linear Search