- Published on
Course Schedule
- Authors
- Name
- Alex Noh
Introduction
There are a total of numCourses
courses you have to take, labeled from 0
to numCourses - 1
. You are given an array prerequisites
where prerequisites[i] = [a(i), b(i)]
indicates that you must take course b(i)
first if you want to take course a(i)
.
For example, the pair [0, 1]
, indicates that to take course 0
you have to first take course 1
. Return true
if you can finish all courses. Otherwise, return false
.
Solutions
1. Using DFS(recursion)
This solution detects cycles in the course-prerequisites relationship. To identify a cycle, it recursively calls the dfs
function. For efficiency, it stores nodes that have already been visited in the visited
set.
main.py
def can_finish(num_courses: int, prerequisites: List[List[int]]) -> bool:
course_graph = defaultdict(list)
for course, prerequisite in prerequisites:
course_graph[prerequisite].append(course)
# courses being traced to detect a cycle.
traced = set()
# courses already visited.
visited = set()
def dfs(course):
if course in traced:
return False
if course in visited:
return True
traced.add(course)
# Process all the next courses that depend on the current course
for next_course in course_graph[course]:
if not dfs(next_course):
return False
traced.remove(course)
visited.add(course)
return True
# Check each course in the graph
for course in range(num_courses):
if course in course_graph and not dfs(course):
return False
return True