Как программно решить головоломку 15 (движущихся чисел)?

все вы, вероятно, видели головоломку движущегося числа/картинки. Тот, где у вас есть цифры от 1 до 15 в сетке 4x4 и пытается получить их из случайной начальной позиции в

1   2  3  4
5   6  7  8
9  10 11 12
13 14 15 

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

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

1   2  3  4
X   X  X  X
X   X  X  X
X   X  X 

затем первый столбец, не касаясь решенных ячеек

1   2  3  4
5   X  X  X
9   X  X  X
13  X  X 

а затем вторую строку в

1   2  3  4
5   6  7  8
9   X  X  X
13  X  X 

а затем второй столбец

1   2  3  4
5   6  7  8
9   10  X  X
13  14  X 

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

Моя программа выполняет решение указанной строки/столбца, пытаясь получить номер X в указанную позицию, если не портить правильные ячейки. Но он не может делать последние 3 плитки на сетке 2x2. Что мне не хватает?

Ответы

Ответ 1

Вы определенно находитесь на правильном пути, но вместо того, чтобы решать по строке/столбцу итеративно до того, чтобы оставаться с 2x2, разрешите, пока у вас не будет минимум 3x3, а затем разрешите только эту сетку. 3x3 - это наименьший размер, необходимый для правильной переупорядочивания сетки (в то время как 2x2 не дает вам полной гибкости, которая вам может понадобиться, как вы уже говорили). Этот подход также масштабируется - вы можете решить 5x5, 10x10 и т.д.

Ответ 2

Убедитесь, что ваша головоломка разрешима в первую очередь. Не все -.

В противном случае ваша стратегия выглядит здорово.

Ответ 3

Этот сайт имеет приятное объяснение о сетках 3x3, вы, вероятно, могли бы легко расширить его до 4x4.

Ответ 4

Я думаю, что наиболее эффективным способом решения этого вопроса является использование аддитивных паттернов с приемлемым эвристическим алгоритмом и алгоритмом IDA *. Как описано здесь - http://www.aaai.org/Papers/JAIR/Vol22/JAIR-2209.pdf. (Я думаю, что Фелнер сказал нам, что нашел способ, который является довольно хорошим, но я не помню точно, что это было (двунаправленный A *?), Но во всяком случае этого должно быть достаточно (-:).
В любом случае этот курс был давно, поэтому я рекомендую прочитать статью.
НТН. Будьте осторожны.

Ответ 5

При уменьшении единственно возможный случай, который вы не можете решить, должен иметь форму
1 3
2 X
и вы хотите получить его в 1 2
3 X

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

Ответ 6

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

Если мы рассматриваем пустое место в головоломке как один из фрагментов, то каждый законный ход включает в себя замену пустой "плитки" для соседней плитки. Это позволяет рассматривать движения на головоломке как перестановки на 16 символов. То есть элементы симметричной группы S 16. Каждое примитивное перемещение является "свопом" или транспозицией между двумя элементами (одним из которых является пробел).

Поскольку головоломка начинается и заканчивается пустой плиткой в ​​правом нижнем углу, пустая плитка должна двигаться ровно столько раз, чтобы головоломка была решена. (Это проще всего увидеть, представив наброшенный шаблон шахматной доски поверх головоломки - после нечетного количества перемещений пробел будет на другом цветовом квадрате.) Это означает, что принятое решение должно быть произведением равномерно много перестановок, поэтому он должен быть элементом чередующейся группы A 16, которая имеет ровно половину S 16. (Из 16! Перестановок S 16, 16!/2 перестановки четные, а 16!/2 нечетны. Более того, четный * четный = четный, четный * нечетный = нечетный и нечетный * нечетный = ровный.)

Если необходимая корректирующая перестановка оказывается нечетной, невозможно решить загадку, независимо от того, что вы делаете. Если необходимая корректирующая перестановка четная, и если Axarydax следует описанной стратегии, то перестановка, требуемая для оставшегося блока 2x2, обязательно будет четной перестановкой, фиксирующей пустой квадрат. Единственными четными перестановками только трех элементов являются вращения 1- > 2- > 3- > 1 (обозначение цикла (123)) и 1- > 3- > 2- > 1 (обозначение цикла (132)). Они легко выполняются на оставшихся четырех квадратах, не нарушая других.

Поскольку неправдоподобно, что Axarydax не может определить эти тривиальные решения блоков 2x2, я подозреваю, что либо он/она был взломан, либо 15-головоломка, пытающаяся каким-то образом нестандартна.

Ответ 7

Всегда есть до 4 позиций перемещения из любого заданного. Интересно, достигнет ли простой алгоритм, который будет обрабатывать все варианты, построив дерево 2-4, в "разрешенную" позицию или переполнение стека:)