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