Задача состоит в том, чтобы создать алгоритм для робота, который сможет перемещаться по бесконечному полю с препятствиями (вертикальные и горизонтальные стены) и выполнять некоторую задачу (которая не указана, но подразумевается, что она существует и должна быть выполнена до завершения алгоритма). Робот начинает над горизонтальной стеной, а его конечное положение может быть произвольным. Важно, чтобы робот не разрушился и алгоритм завершился.
Ключевые моменты:
Так как конкретная задача не указана, а алгоритм должен быть универсальным для любых допустимых расположений стен, мы можем предложить алгоритм, который сначала исследует окружение, находит стены и затем строит карту, чтобы безопасно перемещаться и, предположительно, выполнить некоторую целевую операцию.
В качестве среды для формального исполнителя часто используются языки типа КуМир. Приведем пример структуры алгоритма, который мог бы быть реализован.
Предполагаемые команды робота:
впередналевонаправокрай(направление) - возвращает истину, если в указанном направлении стена.повтори N раз ... конецесли ... то ... иначе ... конецалг ЗакраситьПериметр (имя_робота)цел i, jнач// Алгоритм для обхода и определения периметра,// затем, возможно, закраски.// Начальное положение: над горизонтальной стеной.// Задача: обойти и зафиксировать стены.// Можно начать с движения вперед, пока не упремся в стенупока не край(вперед)впередконец// Теперь мы уперлись в стену. Нужно определить, куда идти дальше// Определим, что перед нами: вертикальная стена или край поляесли край(верх)// Если сверху стена, значит, мы у верхней горизонтальной стены.// Теперь нужно найти края вертикальных стен// Повернем налево, чтобы двигаться вдоль верхней стеныналево// Двигаемся вдоль верхней стены, пока не упремся в боковуюпока не край(вперед)впередконец// Теперь мы упёрлись в вертикальную стену (справа или слева)// Повернем направо, чтобы двигаться вниз вдоль вертикальной стенынаправо// Теперь двигаемся вниз, пока не упрёмся в нижнюю горизонтальную стенупока не край(вперед)впередконец// И так далее, по аналогии, обходим всё поле.// Этот простой алгоритм работает, если стены образуют замкнутый периметр.// Для более сложных случаев требуется построение полной карты.иначе// Если сверху не стена, то мы можем двигаться дальше.// Этот случай нужно обрабатывать более детально,// возможно, с построением полной карты поля.// В данном случае, т.к. начальное условие - над горизонтальной стеной,// мы предполагаем, что поле ограничено стенами.конец// Для универсального решения, лучше всего использовать алгоритм,// который строит карту поля.// Например, робот может двигаться по спирали или зигзагом,// отмечая пройденные клетки и найденные стены.// Когда карта построена, можно выполнить любую задачу (например, закрасить клетку).// Предположим, что задача - закрасить клетку, в которой находится робот.// Для этого мы сначала должны убедиться, что робот находится не на стене.// Этот базовый алгоритм предполагает, что задача - просто