leetcode-210

141 阅读1分钟

题目描述:具体描述见原题。简单来说就是如果拓扑网中没有环路,遍历输出拓扑路径。

解题思路:检验拓扑网络中是否存在环路具体思路见leetcode-207,当拓扑网络中不存在环路时,访问出度为0顶点的顺序即为遍历路径之一。具体过程见代码。

具体代码:

func findOrder(numsCourses int, prerequisites [][]int) bool {
   in := make([]int, numsCourses)
   links := make([][]int, numsCourses)
   next := make([]int, 0)
   for _, p := range prerequisites{
      in[p[0]]++
      links[p[1]] = append(links[p[1]], p[0])
   }
   for i, v := range in {
      if v == 0 {
         next = append(next, i)
      }
   }
   for i := 0; i < len(next); i++ {
      n := next[i]
      l := links[n]
      for _, t := range l{
         in[t]--
         if in[t] == 0 {
            next = append(next, t)
         }
      }
   }
   if (len(next) == numsCourses) { // 如果不存在环路,返回next数组
       return next
   }
   return []int{} // 如果存在环路,按照要求返回空数组
}

补充说明:这道题其实和207解题思路一样,所以算作今天偷懒hhhhh。