- Reference
graph
- λ°±μ€: List
- LeetCode: defaultdict(list)
Solution
import collections
from typing import List
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
graph = collections.defaultdict(list)
for x, y in prerequisites:
graph[x].append(y)
traced, visited = set(), set()
def dfs(index) -> bool:
# μν κ΅¬μ‘°μΌ λ
if index in traced:
return False
# μ΄λ―Έ λ°©λ¬Ένλ λ
ΈλμΌ λ
if index in visited:
return True
traced.add(index)
for y in graph[index]:
# μν κ΅¬μ‘°μΌ λ
if not dfs(y):
return False
# νμ μ’
λ£ ν -> μν, λ°©λ¬Έ λ
Έλ κ°κ° μμ , μΆκ°
traced.remove(index)
visited.add(index)
return True
for x in list(graph):
if not dfs(x):
return False
return True
Leave a comment