from .finder import Finder, TIME_LIMIT, MAX_RUNS from pathfinding.core.util import backtrace from pathfinding.core.diagonal_movement import DiagonalMovement class BreadthFirstFinder(Finder): def __init__(self, heuristic=None, weight=1, diagonal_movement=DiagonalMovement.never, time_limit=TIME_LIMIT, max_runs=MAX_RUNS): super(BreadthFirstFinder, self).__init__( heuristic=heuristic, weight=weight, weighted=False, diagonal_movement=diagonal_movement, time_limit=time_limit, max_runs=max_runs) if not diagonal_movement: self.diagonalMovement = DiagonalMovement.never def check_neighbors(self, start, end, grid, open_list): node = open_list.pop(0) node.closed = True if node == end: return backtrace(end) neighbors = self.find_neighbors(grid, node) for neighbor in neighbors: if neighbor.closed or neighbor.opened: continue open_list.append(neighbor) neighbor.opened = True neighbor.parent = node