标签:node can 拓扑排序 end ice compute while logs turn
There are a total of n courses you have to take, labeled from
0
ton - 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.
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(拓扑排序)
标签:node can 拓扑排序 end ice compute while logs turn
原文地址:http://www.cnblogs.com/LiCheng-/p/6621602.html