@Sheephard

Требуется минимизировать количество точек с хотя бы одной целочисленной координатой на линии. Как это сделать?

У меня есть координаты двух точек. Мне требуется провести между ними ломаную так, что бы количество пересечений этой ломаной с координатами, где хотя бы одна из них — целая, были сведены к минимуму. Как я могу это сделать и как мне найти количество этих точек пересечения?

Вот кусок кода, который, по идее, должен был это делать:
rx = x1 - x0
ry = y1 - y0

if abs(rx) < abs(ry):
    res.append(abs(ry) + 1)
else:
     res.append(abs(rx) + 1)
k += 1

х0 и х1 — координаты первой, а у0 и у1 — координаты второй точки.
В res, по задумке, у меня должен быть ответ (кладу ответы в список, т.к. точек может быть несколько).
Заранее благодарю за любую помощь.
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Представьте сетку вдоль целых координат. Ваши две точки в каких-то ячейках. Чтобы перейти из одной ячейки в соседнюю придется пересечь границу - это будет считаемая точка.

Т.е. вам надо найти путь из одной клетки в другую, пройдя по как можно меньшему количеству клеток. Можно ходить в 8 направлений - если пересечь угол, то можно за одну точку на ломаной перейти по диагонали.

Немного порисовав вы поймёте, что ответ - миксимум из горизонтального и вертикального расстояний между начальной и конечной клетками.

Надо только аккуратно разобрать случаи, если начальная или конечная точка лежит на границе клетки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы