2026-rff_mp/VildyaevAV/docs/task2/solver.py

50 lines
1.1 KiB
Python
Raw Normal View History

2026-05-21 18:50:03 +00:00
import time
class SearchStats:
def __init__(self, time_ms, visited_cells, path_length):
self.time_ms = time_ms
self.visited_cells = visited_cells
self.path_length = path_length
class MazeSolver:
def __init__(self, maze, strategy):
self.maze = maze
self.strategy = strategy
self.observers = []
def set_strategy(self, strategy):
self.strategy = strategy
def add_observer(self, observer):
self.observers.append(observer)
def notify(self, event):
for observer in self.observers:
observer.update(event)
def solve(self):
self.notify("search_started")
start_time = time.perf_counter()
path, visited_cells = self.strategy.find_path(
self.maze,
self.maze.start,
self.maze.exit
)
end_time = time.perf_counter()
self.notify("search_finished")
time_ms = (end_time - start_time) * 1000
stats = SearchStats(
time_ms=time_ms,
visited_cells=visited_cells,
path_length=len(path)
)
return stats, path