2026-rff_mp/MusinAA/task2/strategyObjects/DFS.py

41 lines
1.3 KiB
Python
Raw Normal View History

from task2.strategyObjects.pathFindingStrategy import PathFindingStrategy
from task2.strategyObjects.util import restorePath
from task2.mazeObjects.maze import Maze
from task2.mazeObjects.cell import Cell
2026-05-23 09:02:30 +00:00
from task2.mazeObjects.path import Path
class DFS(PathFindingStrategy):
2026-05-16 21:45:29 +00:00
"""Поиск в глубину быстрый, но не обязательно кратчайший.
Возвращает None, если пути нет"""
2026-05-23 09:02:30 +00:00
def findPath(self, maze: Maze, start: Cell, exit: Cell) -> Path:
2026-05-16 21:45:29 +00:00
visited = dict()
parents = dict()
stack = []
stack.append(start)
visited[start] = 0
parents[start] = None
found_exit = False
2026-05-16 21:45:29 +00:00
while stack:
current = stack.pop()
# Условие нахождение выхода
if current.isExit:
found_exit = True
break
2026-05-16 21:45:29 +00:00
# Перебор соседей
for hood in maze.getNeighbors(current):
if hood in visited:
continue
visited[hood] = visited[current] + 1
parents[hood] = current
stack.append(hood)
if not found_exit:
path_list = None
else:
path_list = restorePath(parents, exit)
return Path(path_list, len(visited))