37 lines
715 B
Go
37 lines
715 B
Go
package q207
|
|
|
|
func canFinish(numCourses int, prerequisites [][]int) bool {
|
|
nDeps := make([]int, numCourses)
|
|
revDeps := make([][]int, numCourses)
|
|
|
|
for i := range prerequisites {
|
|
course, prereq := prerequisites[i][0], prerequisites[i][1]
|
|
nDeps[course]++
|
|
revDeps[prereq] = append(revDeps[prereq], course)
|
|
}
|
|
|
|
queue := []int{}
|
|
for i := range numCourses {
|
|
if nDeps[i] == 0 && len(revDeps) > 0 {
|
|
queue = append(queue, i)
|
|
}
|
|
}
|
|
for ; len(queue) > 0; queue = queue[1:] {
|
|
course := queue[0]
|
|
for _, r := range revDeps[course] {
|
|
nDeps[r]--
|
|
if nDeps[r] == 0 {
|
|
queue = append(queue, r)
|
|
}
|
|
}
|
|
}
|
|
|
|
for _, n := range nDeps {
|
|
if n > 0 {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
var _ = canFinish
|