from strategy import PathFindingStrategy from Maze import Maze, Cell class DeikstraFind(PathFindingStrategy): def findPath(self, maze, start, exit): if not start or not exit: return [], len(parents) queue = [start] distances = {start: 0} parents = {start: None} while len(queue) != 0: best_cell = queue[0] for cell in queue: if distances[cell] < distances[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) for child in maze.getNeighbors(u): distance_through_u = distances[u] + 1 if distance_through_u < distances.get(child, float('inf')): distances[child] = distance_through_u parents[child] = u if child not in queue: queue.append(child) return [], len(parents)