73 lines
1.2 KiB
Python
73 lines
1.2 KiB
Python
|
|
import time
|
||
|
|
|
||
|
|
from solver.search_stats import SearchStats
|
||
|
|
|
||
|
|
|
||
|
|
class MazeSolver:
|
||
|
|
|
||
|
|
def __init__(
|
||
|
|
self,
|
||
|
|
maze,
|
||
|
|
strategy
|
||
|
|
):
|
||
|
|
self.maze = maze
|
||
|
|
self.strategy = strategy
|
||
|
|
self.observers = []
|
||
|
|
|
||
|
|
def addObserver(
|
||
|
|
self,
|
||
|
|
observer
|
||
|
|
):
|
||
|
|
self.observers.append(
|
||
|
|
observer
|
||
|
|
)
|
||
|
|
|
||
|
|
def notify(
|
||
|
|
self,
|
||
|
|
event
|
||
|
|
):
|
||
|
|
for observer in self.observers:
|
||
|
|
observer.update(event)
|
||
|
|
|
||
|
|
def setStrategy(
|
||
|
|
self,
|
||
|
|
strategy
|
||
|
|
):
|
||
|
|
self.strategy = strategy
|
||
|
|
|
||
|
|
def solve(self):
|
||
|
|
|
||
|
|
self.notify(
|
||
|
|
"search_started"
|
||
|
|
)
|
||
|
|
|
||
|
|
start_time = time.perf_counter()
|
||
|
|
|
||
|
|
path, visited_cells = (
|
||
|
|
self.strategy.findPath(
|
||
|
|
self.maze,
|
||
|
|
self.maze.start,
|
||
|
|
self.maze.exit
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
finish_time = (
|
||
|
|
time.perf_counter()
|
||
|
|
)
|
||
|
|
|
||
|
|
elapsed_ms = (
|
||
|
|
finish_time
|
||
|
|
- start_time
|
||
|
|
) * 1000
|
||
|
|
|
||
|
|
stats = SearchStats(
|
||
|
|
elapsed_ms,
|
||
|
|
visited_cells,
|
||
|
|
len(path)
|
||
|
|
)
|
||
|
|
|
||
|
|
self.notify(
|
||
|
|
"search_finished"
|
||
|
|
)
|
||
|
|
|
||
|
|
return path, stats
|