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