Удалить SmirnovaVYu/docs/data/solver.py
This commit is contained in:
parent
bd4d2dad4f
commit
1818154b9a
|
|
@ -1,49 +0,0 @@
|
||||||
import time
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from typing import List, Optional, Tuple
|
|
||||||
from models import Cell, Maze
|
|
||||||
from strategies import PathFindingStrategy
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class SearchStats:
|
|
||||||
time_ms: float
|
|
||||||
visited_cells: int
|
|
||||||
path_length: int
|
|
||||||
path_found: bool = True
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
if not self.path_found:
|
|
||||||
return f"Путь не найден (время: {self.time_ms:.2f} мс)"
|
|
||||||
return (f"Время: {self.time_ms:.2f} мс, "
|
|
||||||
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("Стратегия не установлена")
|
|
||||||
|
|
||||||
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) if path else 0,
|
|
||||||
path_length=len(path) if path else 0,
|
|
||||||
path_found=bool(path)
|
|
||||||
)
|
|
||||||
|
|
||||||
return path, stats
|
|
||||||
Loading…
Reference in New Issue
Block a user