From 23012e3e84f13e9c830d2ebe2d48d2638356d377 Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 23 May 2026 19:49:44 +0300 Subject: [PATCH] =?UTF-8?q?4=20=D1=8D=D1=82=D0=B0=D0=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nikolaevda/task2/Zadanie2.py | 43 +++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) 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