diff --git a/ProninVV/task-2-oop/AStarStrategy.py b/ProninVV/task-2-oop/AStarStrategy.py new file mode 100644 index 0000000..e366706 --- /dev/null +++ b/ProninVV/task-2-oop/AStarStrategy.py @@ -0,0 +1,41 @@ +from Maze import Cell, Maze +from strategy import PathFindingStrategy + + +class AStarStrategy(PathFindingStrategy): + def findPath(maze, start, exit): + + def heuristik(cell): + return abs(cell.x - exit.x) + abs(cell.y - exit.y) + + if not start or not exit: + return [] + + parents = {start: None} + + queue = [start] + + 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 + + childs = maze.getNeighbors(u) + for child in childs: + if child not in parents: + parents[child] = u + queue.append(child) + return []