from task2.mazeObjects.maze import Maze from task2.mazeObjects.cell import Cell from task2.strategyObjects.pathFindingStrategy import PathFindingStrategy import time class SearchStats: """Время выполнения в миллисекундах, количество посещённых клеток, длина найденного пути""" def __init__(self, path: list[Cell]|None, duration:float, visited_cells:int, path_len:int, strategy_name:str): self.duration = duration self.visited_cells = visited_cells self.path_len = path_len self.path = path self.strategy_name = strategy_name class MazeSolver: """ MazeSolver содержит поля maze и strategy. Метод setStrategy(strategy) для динамической смены алгоритма. Метод solve() вызывает strategy.findPath(...) и возвращает объект SearchStats (время выполнения в миллисекундах, количество посещённых клеток, длина найденного пути). Для замера времени используйте time.perf_counter() до и после вызова стратегии. """ def __init__(self, maze:Maze, strategy:PathFindingStrategy): self.maze = maze self.strategy = strategy def setStrategy(self, strategy:PathFindingStrategy): self.strategy = strategy def getStrategyName(self): return self.strategy.__class__.__name__ def solve(self): t_start = time.perf_counter() path = self.strategy.findPath(self.maze, self.maze.startCell, self.maze.endCell) duration = time.perf_counter() - t_start path_len = len(path.array) if path.array else 0 strategy_name = self.getStrategyName() return SearchStats(path.array, duration, path.visited_cells, path_len, strategy_name)