题目:https://www.lintcode.com/problem/course-schedule/description
思路:indgree = [[0,[]] for i in range(numCourses)]
建立一个indegree数组,记录 [需要修的优先课程数,[是哪些科目的条件]]
class Solution:
"""
@param: numCourses: a total of n courses
@param: prerequisites: a list of prerequisite pairs
@return: true if can finish all courses or false
"""
def canFinish(self, numCourses, prerequisites):
# write your code here
if numCourses == 0 or prerequisites == None or len(prerequisites)==0:
return True
indgree = self.indgreeproduct(numCourses,prerequisites)
queue = []
hashtable = set()
for i in range(numCourses):
if indgree[i][0] == 0 :
queue.append(i)
hashtable.add(i)
while queue:
current = queue.pop(0)
for i in indgree[current][1]:
indgree[i][0] -= 1
if indgree[i][0] == 0:
queue.append(i)
hashtable.add(i)
if len(hashtable) == numCourses:
return True
return False
def indgreeproduct(self,numCourses, prerequisites):
indgree = [[0,[]] for i in range(numCourses)]
for i in prerequisites:
if i[1] not in indgree[i[0]][1]:
indgree[i[1]][0] += 1
indgree[i[0]][1].append(i[1])
return indgree