diff --git a/MusinAA/task2/strategyObjects/BFS.py b/MusinAA/task2/strategyObjects/BFS.py index a76f3a5..becac59 100644 --- a/MusinAA/task2/strategyObjects/BFS.py +++ b/MusinAA/task2/strategyObjects/BFS.py @@ -6,7 +6,8 @@ from task2.mazeObjects.cell import Cell import queue class BFS(PathFindingStrategy): - """Поиск в ширину – гарантирует кратчайший путь по количеству шагов.""" + """Поиск в ширину – гарантирует кратчайший путь по количеству шагов. + Возвращает None, если пути нет""" def findPath(self, maze: Maze, start: Cell, exit: Cell): visited = dict() parents = dict() @@ -37,6 +38,6 @@ class BFS(PathFindingStrategy): while current: path.append(current) if current not in parents: - return [] + return None current = parents[current] return path[::-1] \ No newline at end of file diff --git a/MusinAA/task2/strategyObjects/DFS.py b/MusinAA/task2/strategyObjects/DFS.py index 707be20..88f581c 100644 --- a/MusinAA/task2/strategyObjects/DFS.py +++ b/MusinAA/task2/strategyObjects/DFS.py @@ -4,6 +4,40 @@ 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): - ... \ No newline at end of file + 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] + \ No newline at end of file