From 2249493cc9adfaf76aa9b875c1bce130e5e1c12a Mon Sep 17 00:00:00 2001 From: komissarovgo Date: Sun, 17 May 2026 14:27:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BE=D1=80=D0=BA=D0=B5=D1=81=D1=82=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- komissarovgo/docs2/data2/maze_lab/solver.py | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 komissarovgo/docs2/data2/maze_lab/solver.py diff --git a/komissarovgo/docs2/data2/maze_lab/solver.py b/komissarovgo/docs2/data2/maze_lab/solver.py new file mode 100644 index 0000000..e9d5035 --- /dev/null +++ b/komissarovgo/docs2/data2/maze_lab/solver.py @@ -0,0 +1,49 @@ +import time +from dataclasses import dataclass +from typing import List, Optional, Tuple +from models import Maze, Cell +from strategies import PathFindingStrategy + + +@dataclass +class SearchStats: + + time_ms: float + visited_cells: int + path_length: int + + def __str__(self) -> str: + return (f"Время: {self.time_ms:.3f} мс, " + f"Посещено клеток: {self.visited_cells}, " + f"Длина пути: {self.path_length}") + + +class MazeSolver: + + def __init__(self, maze: Maze, strategy: Optional[PathFindingStrategy] = None): + self._maze = maze + self._strategy = strategy + + def set_strategy(self, strategy: PathFindingStrategy) -> None: + self._strategy = strategy + + def solve(self) -> Tuple[List[Cell], SearchStats]: + if self._strategy is None: + raise ValueError("Стратегия не установлена") + + if self._maze.start is None or self._maze.exit is None: + raise ValueError("Нет старта или выхода") + + start_time = time.perf_counter() + path = self._strategy.find_path(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=len(path), + path_length=len(path) + ) + + return path, stats \ No newline at end of file