Как я могу заполнить квадрат 2D массив с числами, так что (случайный) путем последовательных чисел в порядке возрастания создается от 1 до (edge length)
2
?Заполните 2D сетку с одного путем
Я пытаюсь написать генератор Hidato (aka Hidoku) в JavaScript. Это не обязательно лучший язык, чтобы написать его, но это то, что я использую в настоящее время. Игровая панель изначально только частично заполнена. Единственными гарантированными номерами являются первые и последние числа на пути. Идея игры состоит в том, чтобы создать единый путь чисел через сетку (по вертикали, по горизонтали или по диагонали), так что существует последовательная возрастающая цепочка чисел. Цепь может перекрываться из-за учета диагоналей.
Я застрял на части поколения доски. Действительная сетка должна иметь (один, не ветвящийся) путь последовательных чисел от 1
до (grid size)
2
. Я посмотрел и посмотрел, но не нашел ничего, что могло бы помочь. Есть ли алгоритм трассировки пути, который может заполнить 2D-массив одним путем, состоящим из последовательных чисел?
Мой первоначальный наивный подход состоял в том, чтобы заполнить 2D-массив значениями и значениями подкачки, пока сетка не станет действительной загадкой Хидато. Это потребовалось бы навсегда для вычисления и было бы очень неэффективным, поэтому я отказался от этой идеи.
Моя следующая мысль заключалась в том, чтобы использовать трассировщик пути возврата, чтобы заполнить сетку последовательными значениями, однако я не уверен, как реализовать такой трассировщик. Генерирование пути достаточно просто (выберите случайную смежную ячейку и перейдите к ней до тех пор, пока не будет заполнен 2D-массив), но моя проблема здесь заключается в «обратном следе» алгоритма или каком-то другом способе всегда обеспечивать случайную путь последовательных чисел по всей сетке. Я думал о лабиринте, но это не касается одиночных путей без разветвления или тупиков.
Как я могу исходить отсюда? Должен ли я рассматривать другие варианты, кроме трассировщика пути или другого аналогичного алгоритма?
Похожие вопросы:
Правильно ли я прав: вы помещаете шахматную фигуру короля в случайную ячейку шахматной доски и посещаете каждую ячейку только один раз. Затем вы берете «снимок» этой шахматной доски и перечитываете все ячейки с номерами в порядке обхода? – izogfif
Да, это правильно. Клетки должны быть смежными, однако - я не могу случайно перетащить фигуру в шахматы вокруг – Bojangles
, нужны ли вам ячейки для общего края? Как и шахматная фигура, ладья движется, но только до одного максимума клетки? – izogfif