2026-rff_mp/stepushovgs/labyrinth/source/strategy/BFS.py

48 lines
1.6 KiB
Python
Raw Normal View History

from collections import deque
from source.strategy import PathFindingStrategy, reconstruct_path
from source.classes import Maze, Cell
class BFS(PathFindingStrategy):
2026-05-20 20:07:51 +00:00
def name(self):
"""Возвращает название метода"""
2026-05-20 20:07:51 +00:00
return "BFS"
def findPath(self, maze: Maze) -> tuple[list[Cell], int]:
start_cell = maze.start
exit_cell = maze.exit
# print(f"Старт: {start_cell.getXY()}")
# print(f"Выход: {exit_cell.getXY()}")
# print(f"Соседи старта: {[n.getXY() for n in maze.getNeighbors(start_cell)]}")
queue = deque([start_cell])
parents = {start_cell.getXY(): Cell(-1, -1)}
visited = {start_cell.getXY()}
count_visited = 1
while queue:
current = queue.popleft()
if current.getXY() == exit_cell.getXY():
return reconstruct_path(
came_from=parents,
start=start_cell,
end=current
), count_visited
# neigbours = maze.getNeighbors(current)
# print(f"для клекти {current.getXY()} соседи: {[neigbour.getXY() for neigbour in neigbours]}")
for neighbor in maze.getNeighbors(current):
neig_xy = neighbor.getXY()
if neig_xy not in visited:
visited.add(neig_xy)
parents[neig_xy] = current
count_visited += 1
queue.append(neighbor)
return [], count_visited