LeetCode 210
使用拓扑排序,先修没有依赖的课,去掉这个课之后,再找已经没有依赖的课。如果最后还剩下课,那就是无法完成的。
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
result = []
graph = collections.defaultdict(list)
graph2 = collections.defaultdict(list)
for pr in prerequisites:
graph[pr[0]].append(pr[1])
graph2[pr[1]].append(pr[0])
candidates = []
for c in range(numCourses):
if c not in graph:
candidates.append(c)
while candidates:
c = candidates.pop(0)
result.append(c)
if c in graph2:
for c2 in graph2[c]:
graph[c2].remove(c)
if len(graph[c2]) == 0:
candidates.append(c2)
graph.pop(c2)
if (len(graph) > 0): return []
return result