From 3b12578aa5d4c977a0cda943d4e86d0a1a8fc367 Mon Sep 17 00:00:00 2001 From: dadobt Date: Sun, 22 Oct 2017 21:18:53 +0200 Subject: [PATCH] Topological Sort in Java --- Sorts/TopologicalSort.java | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Sorts/TopologicalSort.java diff --git a/Sorts/TopologicalSort.java b/Sorts/TopologicalSort.java new file mode 100644 index 000000000000..851b7740aa79 --- /dev/null +++ b/Sorts/TopologicalSort.java @@ -0,0 +1,83 @@ +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(); + } +} \ No newline at end of file