# Поиск выхода из лабиринта Объектно-ориентированная реализация поиска пути в лабиринте с паттернами GoF: Builder, Strategy, Observer и Command. ## Что реализовано - модель `Cell` и `Maze`; - загрузка лабиринта из текстового файла через `TextFileMazeBuilder`; - стратегии поиска пути: BFS, DFS, A*, Дейкстра; - `MazeSolver`, который измеряет время, число посещенных клеток и длину пути; - консольный `Observer` для сообщений и отрисовки; - `MoveCommand` и `Player` для ручного режима с undo; - генератор тестовых лабиринтов; - экспериментальный скрипт, CSV и SVG-графики; - отчет: `reports/report.md`. ## Формат лабиринта ```text # - стена - проход S - старт E - выход 2, 3, ~ - проходимые клетки с увеличенным весом ``` Все строки в файле лабиринта должны иметь одинаковую длину. ## Запуск ```bash python3 scripts/generate_mazes.py python3 main.py --maze data/mazes/small.txt --strategy astar --render ``` Доступные стратегии: ```text bfs dfs astar dijkstra ``` Ручной режим с командами `W/A/S/D`, undo через `Z`: ```bash python3 main.py --maze data/mazes/small.txt --manual ``` ## Эксперименты ```bash python3 scripts/run_experiments.py ``` Скрипт перегенерирует лабиринты, запускает каждую стратегию 10 раз и сохраняет: - `reports/results.csv`; - SVG-графики в `reports/charts/`. ## Проверка ```bash python3 -m unittest ```