@@ -17,37 +17,35 @@ They are just saying that there exists one course and that course is course 0. E
17
17
```
18
18
from collections import defaultdict
19
19
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
22
29
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
33
32
return False
34
33
if node in global_visited:
35
34
return True
36
35
visited.add(node)
37
36
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):
40
39
return False
41
- visited.remove(node)
42
40
ordering.append(node)
41
+ visited.remove(node)
43
42
return True
44
43
45
- graph = get_graph(numCourses, prerequisites)
46
- ordering = list()
44
+ adj_list = get_adj_list()
47
45
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 []
52
50
return ordering
53
51
```
0 commit comments