File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ # Time Complexity: O(V + E) - visit each course once and process all edges
2+ # Space Complexity: O(V + E) - storing the graph + recursion stack (worst case)
3+
4+ class Solution :
5+ def canFinish (self , numCourses : int , prerequisites : List [List [int ]]) -> bool :
6+
7+ # Build the adjacency list (prereq map)
8+ preMap = {i : [] for i in range (numCourses )}
9+ for crs , pre in prerequisites :
10+ preMap [crs ].append (pre )
11+
12+ # tracks courses currently being checked (for cycle detection)
13+ visited = set ()
14+
15+ def dfs (crs ):
16+ # found a cycle
17+ if crs in visited :
18+ return False
19+ # no more prereqs left
20+ if preMap [crs ] == []:
21+ return True
22+
23+ # mark as visiting
24+ visited .add (crs )
25+
26+ # check all prereqs for this course
27+ for pre in preMap [crs ]:
28+ if not dfs (pre ):
29+ # cycle detected, return False
30+ return False
31+
32+ # done checking, remove from visited
33+ visited .remove (crs )
34+ # mark as completed
35+ preMap [crs ] = []
36+ return True
37+
38+ # run dfs on every course
39+ for crs in range (numCourses ):
40+ if not dfs (crs ):
41+ return False
42+
43+ return True
You can’t perform that action at this time.
0 commit comments