forked from UNN/2026-rff_mp
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
from task2.strategyObjects.pathFindingStrategy import PathFindingStrategy
|
||
from task2.strategyObjects.util import restorePath
|
||
|
||
from task2.mazeObjects.maze import Maze
|
||
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()
|
||
q = queue.Queue()
|
||
|
||
q.put(start)
|
||
visited[start] = 0
|
||
parents[start] = None
|
||
|
||
while not q.empty():
|
||
current = q.get()
|
||
|
||
# Условие нахождение выхода
|
||
if current == exit: break
|
||
|
||
# Перебор соседей
|
||
for hood in maze.getNeighbors(current):
|
||
if hood in visited:
|
||
continue
|
||
visited[hood] = visited[current] + 1
|
||
parents[hood] = current
|
||
q.put(hood)
|
||
return restorePath(parents, start, exit) |