12345678910111213141516171819202122232425262728 |
- func findOrder(numCourses int, prerequisites [][]int) []int {
- adj := make([][]int, numCourses)
- in := make(map[int]int)
- for i := 0; i < numCourses; i++ {
- in[i] = 0
- }
- for i := range prerequisites {
- adj[prerequisites[i][1]] = append(adj[prerequisites[i][1]], prerequisites[i][0])
- in[prerequisites[i][0]]++
- }
- order := make([]int, 0)
- for ring := true; len(in) != 0; ring = true { // Sort by the indegree of nodes
- for k, v := range in {
- if v == 0 {
- ring = false
- order = append(order, k)
- delete(in, k)
- for i := range adj[k] {
- in[adj[k][i]]--
- }
- }
- }
- if ring {
- return []int{}
- }
- }
- return order
- }
|