forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCourse Schedule.java
47 lines (42 loc) · 1.37 KB
/
Course Schedule.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
int n = numCourses;
boolean [] visited = new boolean[n];
boolean [] dfsVisited = new boolean[n];
List<List<Integer>> adj = createAdjList(n,prerequisites);
for(int i=0;i<n;i++){
if(visited[i]==false){
if(isCycle(i,adj,visited,dfsVisited)){
return false;
}
}
}
return true;
}
//find cycle in a directed graph
private boolean isCycle(int s,List<List<Integer>> adj,boolean [] visited,boolean[] dfsVisited){
visited[s]=true;
dfsVisited[s]=true;
for(int v:adj.get(s)){
if(visited[v]==false){
if(isCycle(v,adj,visited,dfsVisited)){
return true;
}
}else if(visited[v]==true && dfsVisited[v]==true) {
return true;
}
}
dfsVisited[s]=false;
return false;
}
private List<List<Integer>> createAdjList(int n,int[][] prerequisites){
List<List<Integer>> adj = new ArrayList();
for(int i=0;i<n;i++){
adj.add(new ArrayList<>());
}
for(int[] e : prerequisites){
adj.get(e[1]).add(e[0]);
}
return adj;
}
}