-
Notifications
You must be signed in to change notification settings - Fork 214
/
Copy path0210-课程表II.py
33 lines (30 loc) · 1.11 KB
/
0210-课程表II.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution:
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
from collections import defaultdict, deque
indegree = defaultdict(int)
children = defaultdict(set)
all_courses = set()
for cur, pre in prerequisites:
indegree[cur] += 1
children[pre].add(cur)
all_courses.add(cur)
all_courses.add(pre)
queue = deque([])
for course in all_courses:
if indegree[course] == 0:
queue.append(course)
# 2. BFS, let course with indegree 0 leave a queue, and let its children with indegree 0 into the queue
res = []
while queue:
cur = queue.popleft()
res.append(cur)
for child in children[cur]:
indegree[child] -= 1
if indegree[child] == 0:
queue.append(child)
if len(res) != len(all_courses):
return []
for course in range(numCourses):
if course not in all_courses:
res.append(course)
return res