lc-go/solutions/2/q207/solution.go
2026-01-07 18:04:39 +09:00

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