2
public boolean canFinish(int numCourses, int[][] prerequisites) {4
boolean[] visited = new boolean[n];5
boolean[] dfsVisited = new boolean[n];7
List<List<Integer>> adj = createAdjList(n, prerequisites);8
for (int i = 0; i < n; i++) {9
if (visited[i] == false) {10
if (isCycle(i, adj, visited, dfsVisited)) {18
// find cycle in a directed graph19
private boolean isCycle(int s, List<List<Integer>> adj, boolean[] visited, boolean[] dfsVisited) {24
for (int v : adj.get(s)) {25
if (visited[v] == false) {26
if (isCycle(v, adj, visited, dfsVisited)) {29
} else if (visited[v] == true && dfsVisited[v] == true) {33
dfsVisited[s] = false;37
private List<List<Integer>> createAdjList(int n, int[][] prerequisites) {38
List<List<Integer>> adj = new ArrayList();40
for (int i = 0; i < n; i++) {41
adj.add(new ArrayList<>());43
for (int[] e : prerequisites) {44
adj.get(e[1]).add(e[0]);