Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function mark_krest(r)
- for side = 'wons'
- mark_side(r, side);
- end
- end
- function mark_side(r, side)
- count = 0;
- r.mark;
- while around_the_wall(r, rotate_right(side), side)
- r.mark; count = count + 1;
- end
- while (count > 0)
- around_the_wall(r, rotate_right(side), invert(side));
- count = count - 1;
- end
- end
- function side = rotate_right(side)
- if (side =='w')
- side = 'n';
- elseif (side =='n')
- side = 'o';
- elseif (side =='o')
- side = 's';
- elseif (side =='s')
- side = 'w';
- end
- end
- function result = around_the_wall(r, u, v)
- % Эта функция нужна для обхода стены роботом.
- % Ссылка на робота: r
- % Направление вдоль стенки: u
- % Расположение стенки относительно робота: v
- % Возвращает результат: result = true , если стенку удалось обойти
- % Робот окажется прямиком за стенкой , если смог обойти
- % Робот окажется в исходном положении , если не смог обойти
- % Пример вызова : flag = around_the_wall(r, 's', 'o')
- count = 0; % Количество сделанных шагов
- while r.is_bord(v) % Пока не найдена дыра в стене
- if ~r.is_bord(u) % Если мы можем сделать шаг вдоль стены
- r.step(u); % Делаем его
- count = count + 1; % Увеличиваем количество сделанных шагов
- else % Иначе выйдем из цикла
- break;
- end
- end
- if ~r.is_bord(v) % Если робот перед дырой в стене
- r.step(v); % Шагаем туда
- result = true; % Говорим , что стену удалось обойти
- else % Если робот не нашел брешь в стене
- result = false; % Говорим , что стену не удалось обойти
- end
- u = invert(u); % Разворот вдоль стены , чтобы вернуться обратно
- while ( count > 0 ) % Пока не вернулись в исходное положение
- r.step(u); % Шагаем по напрвлению к исходному положению
- count = count - 1; % Уменьшаем число необходимых шагов
- end
- end
- function result = invert(u)
- % Функция возвращает противоположное к направлению u
- switch u
- case 'w', result = 'o';
- case 'o', result = 'w';
- case 'n', result = 's';
- case 's', result = 'n';
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement