forked from UNN/2026-rff_mp
32 lines
905 B
Python
32 lines
905 B
Python
from collections import deque
|
|
from strategies.pathfinding_strategy import PathFindingStrategy
|
|
|
|
|
|
class BFSStrategy(PathFindingStrategy):
|
|
name = "BFS"
|
|
|
|
def findPath(self, maze, start, exitCell):
|
|
self.visitedCount = 0
|
|
if start is None or exitCell is None:
|
|
return []
|
|
|
|
queue = deque([start])
|
|
visited = {(start.x, start.y)}
|
|
parent = {}
|
|
|
|
while queue:
|
|
current = queue.popleft()
|
|
self.visitedCount += 1
|
|
|
|
if current.x == exitCell.x and current.y == exitCell.y:
|
|
return self._restore_path(parent, start, exitCell)
|
|
|
|
for neighbor in maze.getNeighbors(current):
|
|
pos = (neighbor.x, neighbor.y)
|
|
if pos not in visited:
|
|
visited.add(pos)
|
|
parent[pos] = current
|
|
queue.append(neighbor)
|
|
|
|
return []
|