Related Articles
Java Program for Topological Sorting
• Difficulty Level : Medium
• Last Updated : 17 Jan, 2018

Topological sorting for Directed Acyclic Graph (DAG) is a linear ordering of vertices such that for every directed edge uv, vertex u comes before v in the ordering. Topological Sorting for a graph is not possible if the graph is not a DAG.

For example, a topological sorting of the following graph is “5 4 2 3 1 0”. There can be more than one topological sorting for a graph. For example, another topological sorting of the following graph is “4 5 2 3 1 0”. The first vertex in topological sorting is always a vertex with in-degree as 0 (a vertex with no in-coming edges).

## Java

 `// A Java program to print topological sorting of a DAG``import` `java.io.*;``import` `java.util.*;`` ` `// This class represents a directed graph using adjacency``// list representation``class` `Graph``{``    ``private` `int` `V;   ``// No. of vertices``    ``private` `LinkedList adj[]; ``// Adjacency List`` ` `    ``//Constructor``    ``Graph(``int` `v)``    ``{``        ``V = v;``        ``adj = ``new` `LinkedList[v];``        ``for` `(``int` `i=``0``; i it = adj[v].iterator();``        ``while` `(it.hasNext())``        ``{``            ``i = it.next();``            ``if` `(!visited[i])``                ``topologicalSortUtil(i, visited, stack);``        ``}`` ` `        ``// Push current vertex to stack which stores result``        ``stack.push(``new` `Integer(v));``    ``}`` ` `    ``// The function to do Topological Sort. It uses``    ``// recursive topologicalSortUtil()``    ``void` `topologicalSort()``    ``{``        ``Stack stack = ``new` `Stack();`` ` `        ``// Mark all the vertices as not visited``        ``boolean` `visited[] = ``new` `boolean``[V];``        ``for` `(``int` `i = ``0``; i < V; i++)``            ``visited[i] = ``false``;`` ` `        ``// Call the recursive helper function to store``        ``// Topological Sort starting from all vertices``        ``// one by one``        ``for` `(``int` `i = ``0``; i < V; i++)``            ``if` `(visited[i] == ``false``)``                ``topologicalSortUtil(i, visited, stack);`` ` `        ``// Print contents of stack``        ``while` `(stack.empty()==``false``)``            ``System.out.print(stack.pop() + ``" "``);``    ``}`` ` `    ``// Driver method``    ``public` `static` `void` `main(String args[])``    ``{``        ``// Create a graph given in the above diagram``        ``Graph g = ``new` `Graph(``6``);``        ``g.addEdge(``5``, ``2``);``        ``g.addEdge(``5``, ``0``);``        ``g.addEdge(``4``, ``0``);``        ``g.addEdge(``4``, ``1``);``        ``g.addEdge(``2``, ``3``);``        ``g.addEdge(``3``, ``1``);`` ` `        ``System.out.println(``"Following is a Topological "` `+``                           ``"sort of the given graph"``);``        ``g.topologicalSort();``    ``}``}``// This code is contributed by Aakash Hasija`

Output:

```Following is a Topological Sort of the given graph
5 4 2 3 1 0```

Please refer complete article on Topological Sorting for more details!

My Personal Notes arrow_drop_up