-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay-18.py
32 lines (29 loc) · 885 Bytes
/
Day-18.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
from collections import defaultdict, deque
class Solution:
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
self.graph = defaultdict(list)
self.count = 0
toposort = []
def createGraph():
for u, v in prerequisites:
self.graph[v].append(u)
createGraph()
indegree = [0]*numCourses
for _, e in self.graph.items():
for node in e:
indegree[e] += 1
queue = deque()
for node, deg in enumerate(indegree):
if deg == 0:
queue.append(node)
while queue:
curNode = queue.popleft()
toposort.append(curNode)
self.count += 1
for neigh in self.graph[curNode]:
indegree[neigh] -= 1
if indegree[neigh] == 0:
queue.append(neigh)
if self.count != numCourses:
return []
return toposort