Задача № 1 Есть прямоугольник произвольного размера. Робот находится снаружи в клетке, примыкающей к правой стене прямоугольника. Он должен покрасить все клетки по внешнему периметру прямоугольника и остановиться в исходной клетке.
Ответ нейросети
10 февраля 2026 10:12
Задача понятна: прямоугольник размером H × W задан клетками. Робот стартует снаружи, в клетке на той же строке, что и правая стена прямоугольника (координаты условно: (r0, W+1)). Нужно покрасить все клетки внешнего периметра прямоугольника (то есть все клетки с i = 1 или i = H или j = 1 или j = W) и вернуться к исходной внешней клетке.
Предложенный способ решения (пошагово, по часовой стрелке вокруг периметра, с возвратом к началу)
- Вход на периметр
- Сделайте один шаг влево из стартовой внешней клетки в правую внешнюю клетку прямоугольника: в вершине (r0, W). Это первая окрашенная клетка периметра.
- Подъём по правой стене вверх к углу
- Поднимайтесь вверх по правой стене: переходите от (r0, W) к (r0-1, W), затем к (r0-2, W), …, до (1, W). Все эти клеткиPaint-ятся и образуют правую часть периметра.
- Движение вдоль верхней стороны слева
- Из угла верхнего правого (1, W) идите влево вдоль верхной кромки: (1, W-1), (1, W-2), …, (1, 1). Все эти клеткиPaint-ятся.
- Спуск по левой стене вниз
- Опускайтесь по левой стене: из (1, 1) переходите к (2, 1), затем к (3, 1), …, к (H, 1).
- Движение вдоль нижней стороны вправо
- Теперь идите вдоль нижней стороны справа: из (H, 1) переходите к (H, 2), …, к (H, W). Все эти клеткиPaint-ятся.
- Дополнительное прохождение по правой стене снизу вверх до исходной строки
- Пройдите вверх по правой стене от (H, W) до (r0, W): (H-1, W), (H-2, W), …, (r0, W). Это закрывает оставшиеся участки правой стены и обеспечивает, что все клетки правой границы оказались покрашенными (включая повторное посещение r0, W — можно считать повторной покраской).
- Завершение в исходной внешней клетке
- Сделайте один шаг вправо из (r0, W) обратно в исходную внешнюю клетку (r0, W+1). Вы на месте, все периметр покрашен, задача выполнена.
Почему так работает
- Мы последовательно обходим все границы прямоугольника по часовой стрелке: правая стена (частично), верхняя сторона, левая стена, нижняя сторона и снова правая стена (до исходной строки). Этот маршрут посещает каждая пограничная клетка по меньшей мере один раз, тем самым окрашивая весь внешний периметр. Финальный шаг возвращает вас в начальную внешнюю клетку.
Замечания по особым случаям
- Если H = 1 (одна строка): периметр состоит из всей строки. План всё равно работает: сначала зайдём в (1, W), пройдём к (1, 1) по верхней стороне, затем снова пройдём к (1, W) по нижней стороне, и вернёмся вправо к внешней клетке.
- Если W = 1 (одна колонка): периметр — тоже вся колонка. План адаптируется аналогично: сначала зайдём в (r0, 1), поднимемся/спустимся по колонке, затем вернёмся к внешней клетке с той же строки.
- Пусть r0 = 1 или r0 = H — плоскость маршрута просто включает соответствующую сторону; движение остаётся корректным и закрывает периметр.
Пример для иллюстрации
- Пусть прямоугольник H = 4, W = 6, старт на внешней клетке на строке r0 = 2 (то есть стартовая клетка — (2, 7)).
- Порядок действий:
- Лево: вход в (2, 6) — покраска правой границы на этой строке.
- Вверх по правой стене: (1, 6) — краска.
- Влево по верхней стороне: (1, 5), (1, 4), (1, 3), (1, 2), (1, 1) — краска верхних клеток.
- Вниз по левой стене: (2, 1), (3, 1), (4, 1) — краска левых клеток.
- Вправо по нижней стороне: (4, 2), (4, 3), (4, 4), (4, 5), (4, 6) — краска нижних клеток.
- Вверх по правой стене до r0: (3, 6), (2, 6) — краска остатка правой границы (здесь (2,6) повторно).
- Вправо в исходную внешнюю клетку: (2, 7) — завершение.
- В итоге все -периметральные клетки покрашены, и робот находится в начальной внешней клетке.
Псевдокод (пример, понятный для программиста школьной программы)
- Пусть H, W заданы, r0 — строка старта, позиция внешняя = (r0, W+1).
- MoveLeftTo(r0, W) and paint
- for i = r0-1 down to 1: MoveTo(i, W) and paint
- for j = W-1 down to 1: MoveTo(1, j) and paint
- for i = 2 to H: MoveTo(i, 1) and paint
- for j = 2 to W: MoveTo(H, j) and paint
- for i = H-1 down to r0: MoveTo(i, W) and paint
- MoveTo(r0, W+1) and stop
Если нужно, могу привести конкретный пример кода на языке программирования, который у тебя в exercised варианте (Python, Java, или псевдокод), с учётом объявленных команд MoveTo(x,y) и PaintCurrentCell().
Итог
- Предложенная последовательность движений обеспечивает окраску всего внешнего периметра прямоугольника и возвращение в исходную внешнюю клетку, независимо от размеров прямоугольника (с учётом допустимых degenerate случаев: H=1 или W=1).
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



