добавлен оркестратор
This commit is contained in:
parent
87d8fa16d7
commit
2249493cc9
49
komissarovgo/docs2/data2/maze_lab/solver.py
Normal file
49
komissarovgo/docs2/data2/maze_lab/solver.py
Normal file
|
|
@ -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
|
||||||
Loading…
Reference in New Issue
Block a user