Как пройти квадрат с наибольшего расстояния (Java)

Я работаю над программой, в которой мне нужно пересечь квадрат от наибольшего расстояния до кратчайшего расстояния, начиная с центра и учитывая максимальный диапазон, который может пройти объект.

Обход будет выглядеть примерно так, каждый шаг помечается, начиная с 0 до 35 (извините за дерьмовую диаграмму). Максимальное расстояние будет 3 от центра:

Квадратный обход от самого длинного до кратчайшего расстояния

Я думал, что это может работать в два цикла, но я не думаю, что это будет работать без тонны if заявления. Я хочу, чтобы это было полуэффективно, если это возможно.

Мне не нужен какой-либо код, просто некоторые идеи о том, как заставить его работать (хотя не стесняйтесь размещать что угодно).

Спасибо за помощь ребята.

1 ответ

Решение

Самый простой подход, который я могу придумать, будет включать 5 петель - по одной для каждого направления (все отдельные петли), а затем одну для расстояния снаружи (что будет самой внешней петлей).

Значение самого внешнего цикла позволило бы нам определить, где каждый цикл должен начинаться и заканчиваться.

Как черновик, я думаю, что это будет выглядеть примерно так:

for i = 0 to n
  for x = i to (n-i-1)
    // process matrix[x][i]

  for y = i to (n-i-1)
    // process matrix[n-i][y]

  for x = (n-i) downto i
    // process matrix[x][n-i]

  for y = (n-i) downto i
    // process matrix[i][y]

Я оставлю это вам, чтобы написать реальный код.

Другие вопросы по тегам