From 18fad717d18f7dc5245ab7275993f57c379d5237 Mon Sep 17 00:00:00 2001 From: shivu2806 <91802335+shivu2806@users.noreply.github.com> Date: Sun, 3 Oct 2021 01:18:37 +0530 Subject: [PATCH] initial --- topologicalSorting.java | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 topologicalSorting.java diff --git a/topologicalSorting.java b/topologicalSorting.java new file mode 100644 index 0000000..690177c --- /dev/null +++ b/topologicalSorting.java @@ -0,0 +1,91 @@ +// 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 { + // No. of vertices + private int V; + + // Adjacency List as ArrayList of ArrayList's + private ArrayList > adj; + + // Constructor + Graph(int v) + { + V = v; + adj = new ArrayList >(v); + for (int i = 0; i < v; ++i) + adj.add(new ArrayList()); + } + + // Function to add an edge into the graph + void addEdge(int v, int w) { adj.get(v).add(w); } + + // A recursive function used by topologicalSort + void topologicalSortUtil(int v, boolean visited[], + Stack stack) + { + // Mark the current node as visited. + visited[v] = true; + Integer i; + + // Recur for all the vertices adjacent + // to thisvertex + Iterator it = adj.get(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 code + 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"); + // Function Call + g.topologicalSort(); + } +} +// This code is contributed by Aakash Hasija