# Java Program for Topological Sorting

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

Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.