//using kahn's algo public boolean isCyclic(int V, ArrayList<ArrayList<Integer>> adj) { ans = new int[V]; idx = 0; kahn(V , adj); return idx == V ? false : true; } static int ans[]; static int idx ; public static void kahn(int v, ArrayList<ArrayList<Integer>> graph){ //find indegree int indegree[] = new int[v]; for(int i = 0 ;i < v ; i++){ for(int edge : graph.get(i)){ indegree[edge] ++; } } //add indegree 0 to q Queue<Integer> q = new ArrayDeque<>(); for(int i = 0 ;i < v ; i++){ if(indegree[i] == 0) q.add(i); } //DAG no need of visited //fire BFS while(q.size() > 0){ int rem = q.remove(); ans[idx] = rem; idx++; //reduce indegree of nbrs and add it in the q if 0 //0 means no dependencies they can be printed for(int edge: graph.get(rem)){ indegree[edge]--; if(indegree[edge] == 0) q.add(edge); } } }