diff --git a/0207_course-schedule/README.md b/0207_course-schedule/README.md new file mode 100644 index 0000000..2bcd72b --- /dev/null +++ b/0207_course-schedule/README.md @@ -0,0 +1,31 @@ +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] = [ai, bi]` indicates that you **must** take course `bi` first if you want to take course `ai`. + +* 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`. + +**Example 1:** + + Input: numCourses = 2, prerequisites = [[1,0]] + Output: true + Explanation: There are a total of 2 courses to take. + To take course 1 you should have finished course 0. So it is possible. + + +**Example 2:** + + Input: numCourses = 2, prerequisites = [[1,0],[0,1]] + Output: false + Explanation: There are a total of 2 courses to take. + To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible. + + +**Constraints:** + +* `1 <= numCourses <= 2000` +* `0 <= prerequisites.length <= 5000` +* `prerequisites[i].length == 2` +* `0 <= ai, bi < numCourses` +* All the pairs prerequisites\[i\] are **unique**. + +https://leetcode.com/problems/course-schedule \ No newline at end of file diff --git a/0207_course-schedule/python3/dfs.py b/0207_course-schedule/python3/dfs.py new file mode 100644 index 0000000..9160872 --- /dev/null +++ b/0207_course-schedule/python3/dfs.py @@ -0,0 +1,38 @@ +from collections import defaultdict + +class Solution: + def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: + graph = defaultdict(list) + + for course, pre in prerequisites: + graph[course].append(pre) + + cycles = set() + visited = set() + + def dfs(course): + if course in cycles: + return False + + if course in visited: + return True + + visited.add(course) + cycles.add(course) + + for dep in graph[course]: + if not dfs(dep): + return False + + cycles.remove(course) + + return True + + for course in range(numCourses): + cycles = set() + + if not dfs(course): + return False + + return True + \ No newline at end of file diff --git a/0207_course-schedule/python3/solution.py b/0207_course-schedule/python3/solution.py new file mode 100644 index 0000000..e69de29