diff --git a/nikolaevda/task2/Zadanie2.py b/nikolaevda/task2/Zadanie2.py index 3654457..05605f0 100644 --- a/nikolaevda/task2/Zadanie2.py +++ b/nikolaevda/task2/Zadanie2.py @@ -279,4 +279,45 @@ class DijkstraStrategy(PathFindingStrategy): heapq.heappush(heap, (new_dist, counter, neighbor)) visited.add(neighbor) - return [], len(visited) \ No newline at end of file + return [], len(visited) + + + +class MazeSolver: + """решатель лабиринта - оркестратор, использующий стратегию""" + + def __init__(self, maze): + self.maze = maze + self._strategy = None + + def setStrategy(self, strategy): + """динамическая смена стратегии поиска""" + self._strategy = strategy + print(f" Стратегия изменена на: {strategy.get_name()}") + + def solve(self): + """ + решение лабиринта с использованием текущей стратегии. + возвращает SearchStats (время, посещённые клетки, длина пути) + """ + if self._strategy is None: + raise ValueError("Стратегия не установлена. Используйте setStrategy()") + + + start_time = time.perf_counter() + + + path, visited = self._strategy.findPath(self.maze, self.maze.start, self.maze.exit) + + + end_time = time.perf_counter() + time_ms = (end_time - start_time) * 1000 + + + stats = SearchStats( + time_ms=time_ms, + visited_cells=visited, + path_length=len(path) if path else 0 + ) + + return path, stats \ No newline at end of file