shriyanshi24jindal

Topological Sort - DFS

Mar 29th, 2026
114
0
Never
Not a member of GistPad yet? Sign Up, it unlocks many cool features!
Java 8.73 KB | None | 0 0
  1. class Solution {
  2. /** Idea: normal DFS, only addition is to add node in stack after completing each path traversal*/
  3. public ArrayList<Integer> topoSort(int V, int[][] edges) {
  4. ArrayList<Integer> res = new ArrayList<>();
  5. ArrayList<ArrayList<Integer>> adj = new ArrayList<>();
  6.  
  7. for(int i=0; i<V; i++)
  8. {
  9. adj.add(new ArrayList<Integer>());
  10. }
  11.  
  12. for(int[] edge : edges)
  13. {
  14. int u = edge[0];
  15. int v = edge[1];
  16.  
  17. adj.get(u).add(v);
  18. }
  19.  
  20. Stack<Integer> st = new Stack<>();
  21. boolean[] visited = new boolean[V];
  22.  
  23. for(int i=0; i<V; i++)
  24. {
  25. if(visited[i] == false)
  26. {
  27. dfs(adj, visited, i, st);
  28. }
  29. }
  30.  
  31. while(!st.isEmpty())
  32. {
  33. res.add(st.pop());
  34. }
  35. return res;
  36. }
  37.  
  38. public void dfs(ArrayList<ArrayList<Integer>> adj, boolean[] visited, int node, Stack<Integer> st)
  39. {
  40. visited[node] = true;
  41.  
  42. // traverse all neighbours
  43. for(int v : adj.get(node))
  44. {
  45. if(visited[v] == false)
  46. {
  47. dfs(adj, visited, v, st);
  48. }
  49. }
  50. st.push(node);
  51. }
  52. }
RAW Paste Data Copied