-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcourse_schedule.cpp
37 lines (32 loc) · 1.07 KB
/
course_schedule.cpp
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
class Solution {
public static boolean canFinish(int numCourses, int[][] prerequisites) {
HashMap<Integer, Set<Integer>> courseList = new HashMap<>();
boolean[] visited = new boolean[numCourses];
for (int i = 0; i < prerequisites.length; i++) {
int[] edge = prerequisites[i];
if (courseList.containsKey(edge[0])) {
courseList.get(edge[0]).add(edge[1]);
} else {
Set<Integer> courseNeighs = new HashSet<>();
courseNeighs.add(edge[1]);
courseList.put(edge[0], courseNeighs);
}
}
for(int i = 0; i < numCourses; i++) {
if (!dfs(i, visited, courseList)) return false;
}
return true;
}
static boolean dfs(int course, boolean[] visited, HashMap<Integer, Set<Integer>> courseList) {
if (!courseList.containsKey(course)) return true;
if (visited[course]) return false;
visited[course] = true;
if (courseList.containsKey(course)) {
for (int neigh : courseList.get(course)) {
if (!dfs(neigh, visited, courseList)) return false;
}
}
visited[course] = false;
return true;
}
}