breadth_first.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from .finder import Finder, TIME_LIMIT, MAX_RUNS
  2. from pathfinding.core.util import backtrace
  3. from pathfinding.core.diagonal_movement import DiagonalMovement
  4. class BreadthFirstFinder(Finder):
  5. def __init__(self, heuristic=None, weight=1,
  6. diagonal_movement=DiagonalMovement.never,
  7. time_limit=TIME_LIMIT,
  8. max_runs=MAX_RUNS):
  9. super(BreadthFirstFinder, self).__init__(
  10. heuristic=heuristic,
  11. weight=weight,
  12. weighted=False,
  13. diagonal_movement=diagonal_movement,
  14. time_limit=time_limit,
  15. max_runs=max_runs)
  16. if not diagonal_movement:
  17. self.diagonalMovement = DiagonalMovement.never
  18. def check_neighbors(self, start, end, grid, open_list):
  19. node = open_list.pop(0)
  20. node.closed = True
  21. if node == end:
  22. return backtrace(end)
  23. neighbors = self.find_neighbors(grid, node)
  24. for neighbor in neighbors:
  25. if neighbor.closed or neighbor.opened:
  26. continue
  27. open_list.append(neighbor)
  28. neighbor.opened = True
  29. neighbor.parent = node