思路:和Leetcode 207. Course Schedule一样,只不过将result逆序输出而已,代码就最后一行不一样~
可以参考:Leetcode 207. Course Schedule的代码实现https://blog.csdn.net/lipsky_lipsky/article/details/105699821
class Solution:
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
graphMap = dict()
inDegreeMap = dict()
# init 0
for i in range(numCourses):
graphMap[i] = list()
inDegreeMap[i] = 0
# prerequisities into graphMap and inDegreeMap
for edge in prerequisites:
sub, obj = edge[0], edge[1]
graphMap[sub].append(obj)
inDegreeMap[obj] += 1
sources = []
for key, val in inDegreeMap.items():
if val == 0:
sources.append(key)
print(sources)
result = []
while(len(sources)):
cur_sub = sources.pop(0)
result.append(cur_sub)
for obj in graphMap[cur_sub]:
inDegreeMap[obj] -= 1
if inDegreeMap[obj] == 0:
sources.append(obj)
return reversed(result) if len(result) == numCourses else [] #需要逆序输出哦!