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
|
||
```
|