课程表( 拓扑排序/dfs 判环)
题目链接:https://leetcode-cn.com/problems/course-schedule/
题目大意:给定一个课程依赖关系图,比如课程A依赖课程B,课程B依赖课程C,按照上述的依赖关系,能否学习完所有的课程?
先学C,再学B,最后学A即可
方式1:拓扑排序
我们按照图论的思想,将每个课程看做一个节点,将课程间的这种依赖和被依赖的关系看做节点的出度和入度,即
依赖:出度
被依赖:入度
样例如下
A依赖B等价于A节点指向B节点,那么A节点的出度是1,B节点的入度是1
A依赖D等价于A节点指向B节点,那么A节点现在的出度是2,D节点的入度是1
我们首先找到所有入度为0的节点,即这些节点不被任何节点依赖,我们可以先完成这些课程nums1,这些课程被完成后,依赖这些课程的节点nums2其入度也需要被修改,具体的修改操作为nums2节点的入度都需要减去1,因为nums1节点课程都完成了
然后我们继续选取入度为0的点,直到没有入度为0的点
对于这些入度为0的点的存储我们可以采用队