课程表
Contents
问题描述
- 给定课程总量以及他们的先决条件,请判断是否可能完成所有课程的学习。
- https://leetcode-cn.com/problems/course-schedule/
思路
- 死脑筋啊,题目说先决条件是边缘列表而不是邻接矩阵,我就觉得没办法做了?就不能做个转换吗!转成邻接矩阵或者邻接链表就可以了!这就是经典的空间换时间啊。
- 邻接链表不知道怎么写?List<List>,用一个嵌套的ArrayList就搞定了!
- 拓扑排序怎么搞?起始就是统计一下入度,然后从入度为0的节点开始广度优先遍历就可以了!
- 深度优先遍历的思路:用深度优先遍历判断每一个课程能否成功完成,采用深度优先遍历时,需要有一个flags数组来判断当前课程状态,如果是-1,表明该课程可以被成功完成,如果是1,则表明发现循环。
- 广度优先遍历是向前看,或者说从前往后看,如果一个课程没有前置课程或者前置课程都被成功完成了,那么该课程一定可以成功完成;时间复杂度是O(N*M)
- 深度优先遍历是往后看,往后一直走,看是否会有圈发生。时间复杂度O(N*M)
Author 段新朋
LastMod 2020-07-10