-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy path207-course-schedule.js
More file actions
37 lines (35 loc) · 848 Bytes
/
Copy path207-course-schedule.js
File metadata and controls
37 lines (35 loc) · 848 Bytes
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
function isCycle(graph, u, seen, recStack) {
if(recStack[u]) return true
if(seen[u]) return false // For optimization, not required for correct solution
seen[u] = true
recStack[u] = true
const vs = graph[u] || []
for(let v of vs) {
if(isCycle(graph, v, seen, recStack)) {
return true
}
}
recStack[u] = false
return false
}
/**
* @param {number} numCourses
* @param {number[][]} prerequisites
* @return {boolean}
*/
var canFinish = function(numCourses, prerequisites) {
const graph = {}
// build the graph
for(let prereq of prerequisites) {
const [v,u] = prereq
graph[u] = graph[u] || []
graph[u].push(v)
}
// detect if graph has cycles
const seen = {}
const recStack = {}
for(let i=0; i<numCourses; i++) {
if(isCycle(graph, i, seen, recStack)) return false
}
return true
};