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:
Java program to Implement Tree Set
Integer Constant Pool trong Java
Getting a File’s Mime Type in Java
Hướng dẫn Java Design Pattern – Factory Method
Convert String to Byte Array and Reverse in Java
Java Program to Implement Circular Singly Linked List
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Spring Boot Application as a Service
Java Program to Solve the 0-1 Knapsack Problem
Java 8 Streams peek() API
Java Program to Implement Sieve Of Atkin
Creating a Web Application with Spring 5
Java Program to Solve Tower of Hanoi Problem using Stacks
Functional Interfaces in Java 8
Guide to BufferedReader
Java Program to Find the Peak Element of an Array O(n) time (Naive Method)
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Java Program to Implement Sparse Matrix
Java Program to Represent Graph Using Linked List
Posting with HttpClient
Java Program to Implement String Matching Using Vectors
Compact Strings in Java 9
Multi Dimensional ArrayList in Java
Một số từ khóa trong Java
Using Java Assertions
Spring Boot - Admin Server
Java – Generate Random String
Hướng dẫn Java Design Pattern – Chain of Responsibility
Biến trong java
Java Program to Use rand and srand Functions
Collect a Java Stream to an Immutable Collection
Intro to Inversion of Control and Dependency Injection with Spring