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:
Quản lý bộ nhớ trong Java với Heap Space vs Stack
Check if there is mail waiting
Jackson Ignore Properties on Marshalling
HashSet trong Java hoạt động như thế nào?
Guide to java.util.concurrent.BlockingQueue
Java Program to Implement Sorted Doubly Linked List
Java Program to Implement SynchronosQueue API
Giới thiệu JDBC Connection Pool
Java Program to Check whether Directed Graph is Connected using BFS
Java Program to Implement Singly Linked List
A Guide to the finalize Method in Java
Java Program to implement Associate Array
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Creating a Generic Array in Java
Cài đặt và sử dụng Swagger UI
Giới thiệu Aspect Oriented Programming (AOP)
ETags for REST with Spring
ExecutorService – Waiting for Threads to Finish
Java – Random Long, Float, Integer and Double
Java Program to Find the Nearest Neighbor Using K-D Tree Search
Using Custom Banners in Spring Boot
Spring Data – CrudRepository save() Method
Java Program to Solve the Fractional Knapsack Problem
Spring Security Form Login
Java 9 Stream API Improvements
A Guide to Java SynchronousQueue
A Guide to Java 9 Modularity
Join and Split Arrays and Collections in Java
Java Program to Create a Random Linear Extension for a DAG
Java Program to implement Priority Queue
LinkedList trong java
Quick Guide to @RestClientTest in Spring Boot