2009-03-16 2 views
0

Приветствия.Алгоритм: перемещение по всем элементам массива с ограниченным ограничением перемещения

У меня есть 2-мерный массив размером [N] [N], который будет представлять прямоугольную область/карту с N строками и N столбцами.

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

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

Заранее спасибо.

+0

В чем вопрос? Вы хотите знать, что может быть минимальным X для данного N, и каков соответствующий алгоритм? –

+0

Минимальный X - не такой интересный вопрос ... X должен быть по крайней мере достаточно для того, чтобы он достиг самого дальнего пункта, который был бы приблизительно N, если он начнет в центре и 2N, если он начнет в углу. Думаю, ему нужен алгоритм, который покрывает доску в минимальном количестве прогулок. Хм .. –

+0

Да Дэвид Грейсон. – syaz

ответ

1

Похоже, вы говорите о пошаговой игре? Поэтому я думаю, что вы не должны смотреть на них как на повороты, но смотрите на цели, а не на использование path finding algorithm, чтобы увидеть, сколько шагов от цели, чем предполагать, что цели имеют значение и делят это на количество поворотов, необходимых для достижения что цель и выбрали самый высокий результат в качестве вашего текущего пункта назначения, в следующий раз вам придется снова пересмотреть свою стратегию.

Я попытался сделать мой ответ более ясным, сделайте следующее за каждый ход.

  1. Определить значение целей
    • Определить количество шагов, необходимых для достижения цели, используя path finding algorithm.
    • Рассчитать требуемое количество оборотов (Math.Ceil(steps/stepsPerTurn))
    • Определите объект с наибольшим значением для наименьшего количества оборотов.
    • Путешествие к этой цели.
-1

Heres стратегия, которая не является оптимальным, но это легко, достаточно эффективно, и вам не нужно держать большой список для хранения или делать фантазии вычисления или кодирования.

Начинайте с текущей точки и идите прямо до стены. Спуститесь, идите влево. Держите zig-zagging вперед и назад. Если вы достигнете дна, начните сначала, а зигзаг покройте верхнюю половину аналогичным образом.

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

Этот алгоритм не является оптимальным, но, скорее всего, это 10 строк кода и 2 переменных.

Смежные вопросы