classSolution: defcanFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: # 1. 构造邻接表 grid = [[] for _ inrange(numCourses)] for a, b in prerequisites: grid[b].append(a)
classSolution: defcanFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: # 1. 构造邻接表 grid = [[] for _ inrange(numCourses)] for a, b in prerequisites: grid[b].append(a)
defdfs(x): # 将当前节点设为正在访问 colors[x] = 1 for y in grid[x]: # 如果遇到正在访问的邻居,说明探测到环 if colors[y] == 1: returnTrue # 继续向未访问过的邻居深挖 if colors[y] == 0and dfs(y): returnTrue # 访问结束,设为已完成状态 colors[x] = 2 returnFalse
# 对每一个初始节点进行探测 for i, c inenumerate(colors): if c == 0and dfs(i): # 如果 DFS 发现任何一个方向存在环,则无法完成 returnFalse returnTrue
defmain(): data = sys.stdin.read().strip().split() m, n = int(data[0]), int(data[1]) idx = 2 matrix = [] for i inrange(m): row = list(map(int, data[idx:idx+n])) matrix.append(row) idx += n
sol = Solution() result = sol.canFinish(matrix) print(result)