LeetCode 207. Course Schedule(拓扑排序)
2017-03-26 09:21
363 查看
题目
There are a total of n courses you have to take, labeled from
0to
n - 1.
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:
[0,1]
Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
For example:
2, [[1,0]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
2, [[1,0],[0,1]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
You may assume that there are no duplicate edges in the input prerequisites.
解题思路
本质是一个拓扑排序的问题。将各个任务的入度和出度计算并存储起来
将入度为零的任务放在一个队列中
不断弹出零入度队列,并且维护(删除)弹出任务的出度关系,当维护出度任务时若该任务的入度为零则加入队列,直到队列为空。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/20/4d2ca5b7b4edf94fe06a952fb652b0e1.png)
class Solution(object): def canFinish(self, numCourses, prerequisites): """ :type numCourses: int :type prerequisites: List[List[int]] :rtype: bool """ # 创建入度出度空字典 inDegree, outDegree = {x:[] for x in range(numCourses)}, {x:[] for x in range(numCourses)} # 存储入度出度关系 for course, preCourse in prerequisites: inDegree[course].append(preCourse) outDegree[preCourse].append(course) count, emptyQueue = 0, [] # 将入度为零的任务加入队列 for i in range(numCourses): if not inDegree.get(i): emptyQueue.append(i) # 弹出任务,维护任务 while emptyQueue: node = emptyQueue.pop() count += 1 for j in outDegree[node]: inDegree[j].remove(node) if not inDegree.get(j): emptyQueue.append(j) return count == numCourses
相关文章推荐
- leetcode 207. Course Schedule 课程调度 + 拓扑排序
- LeetCode 207. Course Schedule(拓扑排序-求有向图中是否存在环)
- [leetcode] 207. Course Schedule
- LeetCode 207. Course Schedule(课程安排)
- LeetCode207. Course Schedule
- Leetcode 207. Course Schedule
- [Leetcode] 207. Course Schedule 解题报告
- [LeetCode] 207. Course Schedule 课程安排
- leetcode 207. Course Schedule
- leetcode- 207. Course Schedule
- 拓扑排序-207. Course Schedule[medium]
- 【LeetCode】207. Course Schedule (2 solutions)
- [LeetCode]207. Course Schedule 课程表
- Leetcode 207. Course Schedule
- 第四周:[Leetcode]207. Course Schedule
- LeetCode 207. Course Schedule
- LeetCode *** 207. Course Schedule (Topological Sort )
- 【Leetcode】207. Course Schedule
- leetcode 207. Course Schedule
- leetcode 207. Course Schedule