forked from UNN/2026-rff_mp
68 lines
1.9 KiB
Markdown
68 lines
1.9 KiB
Markdown
|
|
# Поиск выхода из лабиринта
|
|||
|
|
|
|||
|
|
Объектно-ориентированная реализация поиска пути в лабиринте с паттернами 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
|
|||
|
|
```
|