Course Schedule 2
题目描述
解题方法
这一题的edge方向是和别的graph里反过来的,所以最后的stack不应该reverse.
Solution
class Solution(object):
def findOrder(self, numCourses, prerequisites):
"""
:type numCourses: int
:type prerequisites: List[List[int]]
:rtype: List[int]
"""
edge_map = {}
for pre in prerequisites:
if pre[0] in edge_map:
edge_map[pre[0]].append(pre[1])
else:
edge_map[pre[0]] = [pre[1]]
visited = [0 for i in range(numCourses)]
stack = []
def dfs(course):
if visited[course] == 1:
return False
if visited[course] == 2: # can return, cause all its dependency should be done
return True
visited[course] = 1
if course in edge_map:
for depend in edge_map[course]:
if not dfs(depend):
return False
visited[course] = 2
stack.append(course)
return True
for i in range(numCourses):
if visited[i] == 0:
if not dfs(i):
return []
return stack