from task2.strategyObjects.pathFindingStrategy import PathFindingStrategy from task2.mazeObjects.maze import Maze from task2.mazeObjects.cell import Cell class DFS(PathFindingStrategy): """Поиск в глубину – быстрый, но не обязательно кратчайший. Возвращает None, если пути нет""" def findPath(self, maze: Maze, start: Cell, exit: Cell): visited = dict() parents = dict() stack = [] stack.append(start) visited[start] = 0 parents[start] = None while stack: current = stack.pop() # Условие нахождение выхода if current == exit: break # Перебор соседей for hood in maze.getNeighbors(current): if hood in visited: continue visited[hood] = visited[current] + 1 parents[hood] = current stack.append(hood) return self.restorePath(parents, start, exit) def restorePath(self, parents: dict, start: Cell, exit: Cell) -> list[Cell]|None: path = [] current = exit while current: path.append(current) if current not in parents: return None current = parents[current] return path[::-1]