2026-rff_mp/shahovaa/zadanie 2/README.md

68 lines
1.9 KiB
Markdown
Raw Normal View History

2026-05-19 19:39:51 +00:00
# Поиск выхода из лабиринта
Объектно-ориентированная реализация поиска пути в лабиринте с паттернами 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
```