from typing import List from .path_finding_strategy import PathFindingStrategy class DFSStrategy(PathFindingStrategy): """Поиск в глубину (DFS) - быстрый, но не обязательно кратчайший""" def __init__(self): self._visited_count = 0 @property def name(self) -> str: return "DFS" def find_path(self, maze, start, exit_cell) -> List: """Находит путь с помощью DFS""" if not start or not exit_cell: return [] # Стек для DFS (хранит текущую клетку и путь до неё) stack = [(start, [start])] # Множество посещенных клеток visited = {start} self._visited_count = 0 while stack: current, path = stack.pop() self._visited_count += 1 # Нашли выход if current == exit_cell: return path # Проверяем всех соседей for neighbor in maze.get_neighbors(current): if neighbor not in visited: visited.add(neighbor) stack.append((neighbor, path + [neighbor])) # Путь не найден return []