Обход препятствий исполнителем
Обход препятствий исполнителем — это проверка каждой команды движения и выбор таких команд, при которых исполнитель не пересекает стены и не выходит за границы поля. Для решения задачи нужно учитывать текущее положение исполнителя и выполнять только допустимые перемещения.
Сначала определяют положение исполнителя: координаты клетки или точки и направление движения, если оно задано. Затем рассматривают перемещение исполнителя: куда он попадёт после команды и какие клетки пересечёт. Стена является препятствием исполнителя, поэтому нельзя пересекать её даже в том случае, если конечная клетка находится внутри поля.
Проверка допустимости команды
Для каждой команды полезно выполнять одинаковую последовательность действий: найти предполагаемое новое положение, проверить границы поля, проверить стены на пути и только после этого изменить положение исполнителя. Если хотя бы одна проверка не пройдена, команда считается недопустимой. В зависимости от условия задачи её либо не выполняют, либо фиксируют ошибку.
Исполнитель находится в клетке \((3,2)\) и получает команду «вправо». Если поле имеет ширину \(5\), новая клетка \((4,2)\) находится внутри поля. Если между клетками \((3,2)\) и \((4,2)\) нет стены, команда допустима. При наличии стены исполнитель остаётся в прежней клетке, если именно такое правило указано в задаче.
Исполнитель стоит у правой границы поля. Что нужно проверить перед командой «вправо»?
Стена и граница поля — не одно и то же. Граница ограничивает поле снаружи, а стена может находиться внутри него и разделять соседние клетки. Кроме того, недопустимость команды не всегда означает остановку исполнителя: правило поведения нужно прочитать в условии.
Маршрут строят пошагово: после каждой допустимой команды обновляют положение и снова проверяют следующую команду. Если требуется найти любой путь, удобно отмечать посещённые клетки; если требуется выполнить заданную программу, проверяют команды строго по порядку.
Главное
- Проверяйте новое положение и весь путь движения, а не только конечную клетку.
- Нельзя выходить за границы поля или пересекать стену.
- После каждой допустимой команды обновляйте положение исполнителя.