2026-rff_mp/MusinAA/task2/mazeSolver.py
2026-05-23 12:02:30 +03:00

43 lines
1.9 KiB
Python

from task2.mazeObjects.maze import Maze
from task2.mazeObjects.cell import Cell
from task2.strategyObjects.pathFindingStrategy import PathFindingStrategy
import time
class SearchStats:
"""Время выполнения в миллисекундах, количество посещённых клеток, длина найденного пути"""
def __init__(self, path: list[Cell]|None, duration:float, visited_cells:int, path_len:int, strategy_name:str):
self.duration = duration
self.visited_cells = visited_cells
self.path_len = path_len
self.path = path
self.strategy_name = strategy_name
class MazeSolver:
"""
MazeSolver содержит поля maze и strategy.
Метод setStrategy(strategy) для динамической смены алгоритма.
Метод solve() вызывает strategy.findPath(...) и возвращает объект SearchStats (время выполнения в миллисекундах,
количество посещённых клеток, длина найденного пути).
Для замера времени используйте time.perf_counter() до и после вызова стратегии.
"""
def __init__(self, maze:Maze, strategy:PathFindingStrategy):
self.maze = maze
self.strategy = strategy
def setStrategy(self, strategy:PathFindingStrategy):
self.strategy = strategy
def getStrategyName(self):
return self.strategy.__class__.__name__
def solve(self):
t_start = time.perf_counter()
path = self.strategy.findPath(self.maze, self.maze.startCell, self.maze.endCell)
duration = time.perf_counter() - t_start
path_len = len(path.array) if path.array else 0
strategy_name = self.getStrategyName()
return SearchStats(path.array, duration, path.visited_cells, path_len, strategy_name)