from Maze import Cell, Maze from strategy import PathFindingStrategy class AStarStrategy(PathFindingStrategy): def findPath(self, maze, start, exit): def heuristik(cell): return abs(cell.x - exit.x) + abs(cell.y - exit.y) parents = {start: None} queue = [start] if not start or not exit: return [], 0 while len(queue) != 0: best_cell = queue[0] for cell in queue: if heuristik(cell) < heuristik(best_cell): best_cell = cell u = best_cell queue.remove(u) if u == exit: path = [] current = exit while current is not None: path.append(current) current = parents[current] path.reverse() return path, len(parents) childs = maze.getNeighbors(u) for child in childs: if child not in parents: parents[child] = u queue.append(child) return [], len(parents)