《python算法与数据结构2000讲》0207. 课程表
- 标签:深度优先搜索、广度优先搜索、图、拓扑排序
- 难度:中等
题目大意
给定一个整数 numCourses
,代表这学期必须选修的课程数量,课程编号为 0
到 numCourses - 1
。再给定一个数组 prerequisites
表示先修课程关系,其中 prerequisites[i] = [ai, bi]
表示如果要学习课程 ai
则必须要学习课程 bi
。
要求:判断是否可能完成所有课程的学习。如果可以,返回 True
,否则,返回 False
。
解题思路
拓扑排序。
-
使用列表
edges
存放课程关系图,并统计每门课程节点的入度,存入入度列表indegrees
。 -
借助队列
queue
,将所有入度为0
的节点入队。 -
从队列中选择一个节点,并且让课程数 -1。
-
将该顶点以及该顶点为出发点的所有边的另一个节点入度 -1。如果入度 -1 后的节点入度不为 0,则将其加入队列