题目分析
我们首先引入有向图 描述依赖关系
示例:假设 n = 6,先决条件表:[ [3, 0], [3, 1], [4, 1], [4, 2], [5, 3], [5, 4] ]
-
0, 1, 2 没有先修课,可以直接选。其余的,都要先修 2 门课
-
我们用 有向图 描述这种 依赖关系 (做事的先后关系):
在有向图中,我们知道,有入度和出度概念:
如果存在一条有向边 A --> B,则这条边给 A 增加了 1 个出度,给 B 增加了 1 个入度。所以顶点 0、1、2 的 入度为 0。顶点 3、4、5 的 入度为 2
BFS 前准备工作
-
我们关心 课程的入度 —— 该值要被减,要被监控
-
我们关心 课程之间的依赖关系 —— 选这门课会减小哪些课的入度
-
因此我们需要合适的数据结构,去存储这些关系,这个可以通过哈希表
解题思路
-
维护一个 queue,里面都是入度为 0 的课程
-
选择一门课,就让它出列,同时 查看哈希表,看它 对应哪些后续课
-
将这些后续课的 入度 - 1,