做响应式网站的意义,德州建设公司网站,学做网站论坛教程,网页截图快捷键ctrl加什么210. 课程表 II
题目描述#xff1a;现在你总共有 numCourses 门课需要选#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites #xff0c;其中 prerequisites[i] [ai, bi] #xff0c;表示在选修课程 ai 前 必须 先选修 bi 。
例如#xff0c;想要学习课…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下存放的值
}