Обходы сетки и векторы направлений
Перемещайтесь с dx, dy и оставайтесь в границах
«Обходы сетки и векторы направлений» — бесплатный урок Competitive Programming Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Competitive Programming Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Competitive Programming Academy содержит 4 уроков всего.
Перемещение по сетке
Многие задачи на моделирование происходят на сетке из строк и столбцов. Фишка начинает движение из некоторой клетки и перемещается по клеткам согласно направлениям. 🗺️
Отслеживайте строку и столбец
Храните позицию как пару (r, c). Номер строки отсчитывается сверху вниз, а номер столбца — слева направо.
r, c = 0, 0Векторы направлений
Кодируйте каждое перемещение вектором (dr, dc). Прибавление этого вектора к позиции перемещает Вас на одну клетку в нужном направлении без цепочек условий.
dr, dc = 0, 1 # move rightЧетыре соседние клетки
Храните четыре перемещения в массивах, чтобы перебрать их в цикле. Это стандартный шаблон: вверх, вниз, влево и вправо.
DR = [-1, 1, 0, 0]
DC = [0, 0, -1, 1]Сделайте один шаг
Чтобы переместиться, просто прибавьте выбранный вектор к текущей клетке. Одни и те же две строки работают для любого из четырёх направлений.
r += DR[k]
c += DC[k]Оставайтесь в пределах сетки
Перед шагом проверьте, находится ли клетка внутри сетки. Строки имеют номера от 0 до R-1, а столбцы — от 0 до C-1; всё остальное находится за пределами поля.
if 0 <= r < R and 0 <= c < C:
passДиагонали, если они разрешены
В некоторых задачах разрешены и диагональные перемещения. Добавьте четыре вектора углов, чтобы получить набор соседей по восьми направлениям.
DR8 = [-1,-1,-1,0,0,1,1,1]
DC8 = [-1,0,1,-1,1,-1,0,1]Поворот налево или направо
Для робота, который поворачивает, изменяйте индекс направления, вместо того чтобы прописывать отдельные случаи. Взятие по модулю позволяет циклически переходить между четырьмя направлениями.
facing = (facing + 1) % 4 # turn rightЗаблокированные клетки и стены
Проверяйте значение сетки перед перемещением. Если клетка — это стена, пропустите её или остановитесь, точно следуя правилам.
if grid[r][c] == '#':
continueСетки с переходом через край
Если сетка замыкается по краям, берите координаты по модулю размера, чтобы правый край плавно соединялся с левым.
r = (r + dr) % R
c = (c + dc) % CПочему векторы лучше
Векторы направлений заменяют запутанные блоки if-else одним аккуратным циклом. Чем меньше ветвлений, тем меньше ошибок под давлением соревнования.
Быстрая проверка
Вы перемещаетесь по сетке с помощью векторов направлений и должны оставаться на игровом поле.
Итоги
Храните позицию как (r, c), перемещайтесь сложением с векторами направлений, перебирайте четырёх соседей в цикле и всегда проверяйте границы перед шагом. 🚀
Часто задаваемые вопросы
Урок «Обходы сетки и векторы направлений» бесплатный?
Да — полный текст урока «Обходы сетки и векторы направлений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Competitive Programming Academy, подпишись на CoddyKit PRO. Курс Competitive Programming Academy содержит 4 уроков всего.
Чему я научусь в уроке «Обходы сетки и векторы направлений»?
Перемещайтесь с dx, dy и оставайтесь в границах Ты практикуешь Competitive Programming Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Competitive Programming Academy?
Предыдущий опыт не требуется. Competitive Programming Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Обходы сетки и векторы направлений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Competitive Programming Academy?
Да. Каждый урок Competitive Programming Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Моделирование состояния и переход вперёд
- Обходы сетки и векторы направлений
- Поиск циклов в моделировании
- Приручаем сложные крайние случаи