2026-rff_mp/skorohodovsa/task_2/source/strategy/bfs.py
SerKin0 f7577f803c [2] Добавлено:
- Тесты на классы Cell, Maze
- Алгоритмы поиска пути: BFS, DFS, Astar
2026-05-24 17:17:02 +03:00

37 lines
1.2 KiB
Python

from collections import deque
from typing import Optional
from source.models.base import Cell, Maze
from source.strategy.algorithms import PathFindingStrategy
class BFSStrategy(PathFindingStrategy):
"""Поиск в ширину (Breadth-First Search).
Гарантирует кратчайший путь по количеству шагов.
Сложность: O(V + E) по времени и памяти.
"""
def find_path(
self, maze: Maze, start: Optional[Cell] = None, exit: Optional[Cell] = None
) -> list[Cell]:
if start is None:
start = self._find_start(maze)
if exit is None:
exit = self._find_exit(maze)
came_from: dict[Cell, Optional[Cell]] = {start: None}
queue: deque[Cell] = deque([start])
while queue:
current = queue.popleft()
if current is exit:
return self._reconstruct_path(came_from, exit)
for neighbor in maze.get_neighbors(current.x, current.y):
if neighbor not in came_from:
came_from[neighbor] = current
queue.append(neighbor)
return []