forked from UNN/2026-rff_mp
50 lines
1.1 KiB
Python
50 lines
1.1 KiB
Python
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 |