210. 课程表 II

题目描述:现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。

例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。
返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组 。

考察重点:DFS——深度优先搜索

func dfs2(rec [][]int, lenRec []int, flag []int, res *[]int, nowNum int) bool { //思路与p207一致,加入15,16行记录遍历顺序if flag[nowNum] == -1 {return false} else if flag[nowNum] == 1 {return true}flag[nowNum] = -1for i := 0; i < lenRec[nowNum]; i++ {if !dfs2(rec, lenRec, flag, res, rec[nowNum][i]) {return false}}t1 := *res                //t1为地址res中的值   //如果dfs2()中的参数是res []int,则append之后返回的新数组与参数地址不同,则无法通过将res放在参数中来修改它*res = append(t1, nowNum) //所以这里存放的是res *[]int,将res修改完成后,把地址res下存放的值,替换为append返回值flag[nowNum] = 1return true
}
func FindOrder(numCourses int, prerequisites [][]int) []int {var rec [][]intfor i := 0; i < 10; i++ {t := make([]int, numCourses)rec = append(rec, t)}lenRec := make([]int, numCourses)flag := make([]int, numCourses)res := &[]int{}for i := 0; i < len(prerequisites); i++ {temp := prerequisites[i][0]rec[temp][lenRec[temp]] = prerequisites[i][1]lenRec[temp]++}for i := 0; i < numCourses; i++ {if flag[i] == 0 {if !dfs2(rec, lenRec, flag, res, i) {return []int{} //如果有环,返回空数组}}}return *res //返回地址res下存放的值
}

LeetCode—210. 课程表 II相关推荐

  1. leetcode *210. 课程表 II(拓补排序)(2020.5.17)

    [题目]*210. 课程表 II 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们 ...

  2. LeetCode 210. 课程表 II(拓扑排序)

    1. 题目 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课 ...

  3. Leetcode 210.课程表II

    Time: 20190903 Type: Medium 考察:拓扑排序 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 , ...

  4. LeetCode 210. 课程表 II(Kahn)

    1.题目 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程 ...

  5. Leetcode 210. 课程表 II 解题思路及C++实现

    解题思路: 与第207题很像,多的是需要存储一个修读课程的可行解,所以在dfs函数内,当判断第i门课程不存在环时,需要将其push_back进数组cur中. 由于是用深度优先搜索的方法,所以存储在cu ...

  6. 207.课程表 | 210.课程表II(拓扑排序)

    207.课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 . 在选修某些课程之前需要一些先修课程. 先修课程按数组 prerequisites 给出 ...

  7. 210. 课程表 II kahn求拓扑图算法

    210. 课程表 II 难度:中等 题目描述 解题思路 以前没有写过图的,但是有了解过拓扑排序,根据提示还有算法描述很容易就写出代码了.用栈和队列都行,如果用栈就是深度优先搜索,用队列就是广度优先搜索 ...

  8. leetcode 210. Course Schedule II | 210. 课程表 II(Java)

    题目 https://leetcode.com/problems/course-schedule-ii/ 题解 本题与 leetcode 207. Course Schedule 基本相同,代码只需要 ...

  9. 207. 课程表/210. 课程表 II

    2020-06-05 1.题目描述 课程表 2.题解 拓扑排序,首先我们需要一个入度矩阵和邻接表来存放相关的信息,将入度为0的点存入队列/栈,并且将 与其相连的点的入度减1,重复上述操作,如果此时学习 ...

最新文章

  1. Linux新手要了解的十个知识点
  2. [翻译]Axure-Basic Interactions-原型设计工具Axure学习-第1.3节
  3. hdu 1788 Chinese remainder theorem again 【crt的具体过程】
  4. Mysql(7)——auto_increment简介
  5. 游戏模型提取_狐狸在等我中文版 是一款恋爱冒险游戏
  6. java使用itext填充pdf模板,超简单教学,有手就行
  7. 用matlab绘制P三曲线,知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线...
  8. google开源数学引擎_Google的开源PDF引擎,开放无线运动等
  9. Python语言中 del函数和insert函数用法
  10. 全国计算机一级会考分类汇总吗,全国计算机一级考试分布
  11. html分级显示的下拉列表,javascript实现在下拉列表中显示多级树形菜单的方法
  12. AMESim软件建模
  13. mysql垂直分库_mysql垂直分库,水平分库,垂直分表,水平分表
  14. json rpgmv 加密_【RPG Maker MV插件编程】【实例教程6】存档的加密解密与保护
  15. SpringBoot学习心得分享
  16. java ffmpeg 视频水印_java 实现视频转换通用工具类:视频加水印-Ffmpeg(五-1)
  17. 《Python安全攻防:渗透测试实战指南》学习一
  18. 计算机科学类专升本复习之“C语言结构体”详解(初稿)
  19. 台式计算机连接无线,台式机怎么连接wifi?台式机怎么连接无线网络的方法
  20. linux下tshark安装及应用

热门文章

  1. jQuery --- 简单操作合集
  2. Java 类的特性2
  3. PHP获取用户真实IP地址
  4. 23 Refs的应用场景与选用思考
  5. Python之路【第十七篇】:装饰器
  6. spark、oozie、yarn、hdfs、zookeeper、
  7. spring-在配置文件中配置DAO时直接引用DataSource
  8. 微软系统修复工具(试用版)
  9. video4linux简介
  10. X264代码中一些参数的意义