@@ -17,37 +17,35 @@ They are just saying that there exists one course and that course is course 0. E
1717```
1818from collections import defaultdict
1919
20- class Solution(object):
21- def findOrder(self, numCourses, prerequisites):
20+ class Solution:
21+ def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
22+ def get_adj_list():
23+ adj_list = defaultdict(list)
24+ for course, prereq in prerequisites:
25+ adj_list[course].append(prereq)
26+ for n in range(numCourses):
27+ adj_list[n]
28+ return adj_list
2229
23- def get_graph(n_courses, prereqs):
24- graph = defaultdict(list)
25- for course, prereq in prereqs:
26- graph[course].append(prereq)
27- for n in range(n_courses):
28- graph[n]
29- return graph
30-
31- def dfs(node, global_visited, visited, graph, ordering):
32- if node in visited: # cycle detected
30+ def top_sort(node, visited=set()):
31+ if node in visited: # cycle
3332 return False
3433 if node in global_visited:
3534 return True
3635 visited.add(node)
3736 global_visited.add(node)
38- for neighbor in graph [node]:
39- if not dfs (neighbor, global_visited, visited, graph, ordering ):
37+ for neighbor in adj_list [node]:
38+ if not top_sort (neighbor):
4039 return False
41- visited.remove(node)
4240 ordering.append(node)
41+ visited.remove(node)
4342 return True
4443
45- graph = get_graph(numCourses, prerequisites)
46- ordering = list()
44+ adj_list = get_adj_list()
4745 global_visited = set()
48- for node in graph:
49- if node not in global_visited :
50- if not dfs (node, global_visited, set(), graph, ordering ):
51- return []
46+ ordering = list()
47+ for node in adj_list :
48+ if not top_sort (node):
49+ return []
5250 return ordering
5351```
0 commit comments