[1,2] struck-data-task1, maze_task2 #313

Merged
IvanBoy merged 20 commits from nikolaevda/2026-rff_mp:nikolaevda into develop 2026-05-30 11:37:52 +00:00
Showing only changes of commit 23012e3e84 - Show all commits

View File

@ -279,4 +279,45 @@ class DijkstraStrategy(PathFindingStrategy):
heapq.heappush(heap, (new_dist, counter, neighbor))
visited.add(neighbor)
return [], len(visited)
return [], len(visited)
class MazeSolver:
"""решатель лабиринта - оркестратор, использующий стратегию"""
def __init__(self, maze):
self.maze = maze
self._strategy = None
def setStrategy(self, strategy):
"""динамическая смена стратегии поиска"""
self._strategy = strategy
print(f" Стратегия изменена на: {strategy.get_name()}")
def solve(self):
"""
решение лабиринта с использованием текущей стратегии.
возвращает SearchStats (время, посещённые клетки, длина пути)
"""
if self._strategy is None:
raise ValueError("Стратегия не установлена. Используйте setStrategy()")
start_time = time.perf_counter()
path, visited = self._strategy.findPath(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=visited,
path_length=len(path) if path else 0
)
return path, stats