How to programmatically solve the 15 (moving numbers) puzzle?

all of you have probably seen the moving number/picture puzzle. The one where you have numbers from 1 to 15 in a 4x4 grid, and are trying to get them from random starting position to

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

My girlfriend or some of my non-programmer friends can solve this with some mumbo-jumbo magic, that they can't explain to me. I can't solve the puzzle.

The most promising approach I have found out is to solve first row, then I'd get

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

then first column without touching solved cells

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

then second row to

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

then second column

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

the problem is, that remaining X (random) tiles are sometimes in unsolvable position and this is where my solution fails. But I feel as if I'm on the right path.

My program does the solving of specified row/column by trying to get number X to specified position without messing up the correct cells, if possible. But it can't do the last 3 tiles on 2x2 grid. What am I missing?

14
задан Cœur 11 October 2017 в 03:01
поделиться

3 ответа

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

6
ответ дан 1 December 2019 в 12:11
поделиться

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

3
ответ дан 1 December 2019 в 12:11
поделиться

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

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

1
ответ дан 1 December 2019 в 12:11
поделиться
Другие вопросы по тегам:

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