34 lines
626 B
Go
34 lines
626 B
Go
package q210
|
|
|
|
func findOrder(numCourses int, prerequisites [][]int) []int {
|
|
ndeps := make([]int, numCourses)
|
|
revDeps := make([][]int, numCourses)
|
|
ret := make([]int, 0, numCourses)
|
|
|
|
for i := range prerequisites {
|
|
c, dep := prerequisites[i][0], prerequisites[i][1]
|
|
ndeps[c]++
|
|
revDeps[dep] = append(revDeps[dep], c)
|
|
}
|
|
|
|
for i := range ndeps {
|
|
if ndeps[i] == 0 {
|
|
ret = append(ret, i)
|
|
}
|
|
}
|
|
for i := 0; i < len(ret); i++ {
|
|
for _, c := range revDeps[ret[i]] {
|
|
ndeps[c]--
|
|
if ndeps[c] == 0 {
|
|
ret = append(ret, c)
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(ret) != numCourses {
|
|
return nil
|
|
}
|
|
return ret
|
|
}
|
|
|
|
var _ = findOrder
|