-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcourse-schedule.py
37 lines (30 loc) · 939 Bytes
/
course-schedule.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
34
35
36
37
import networkx as nx
from queue import Queue
def canFinish(numCourses: int, prerequisites: list[list[int]])-> bool:
m = len(prerequisites)
eligible = Queue(maxsize = m)
cg = nx.DiGraph()
for i in range(numCourses):
prereq = 0
for j in range(m):
if prerequisites[j][0] == i:
cg.add_edge(prerequisites[j][1], i)
prereq += 1
if prereq == 0:
eligible.put(i)
esize = eligible.qsize()
count = numCourses
while esize > 0:
course = eligible.get()
esize -= 1
for c in list(cg.successors(course)):
cg.remove_edge(course, c)
if list(cg.predecessors(c)) == []:
eligible.put(c)
esize += 1
count -= 1
if count > 0:
return False
return True
retval = canFinish(2, [[1,0], [0,1]])
print(retval)