Я решил посмотреть на проблему и посмотреть, смогу ли я разбить ее на решения 5х5 с окончанием решения одним прыжком от угла другого.
Первое предположение состояло в том, что 5x5 разрешимо. Это и быстро.
Итак, я побежал решить (0,5) и посмотрел на результаты. Я нарисовал 10x10 пронумерованную сетку в Excel с 5x5 пронумерованной сеткой для перевода. Затем я просто искал результаты для #] (конечных ячеек), которые были бы отскоком от начала следующих 5x5. (например, для первого квадрата я искал "13]".)
Для справки:
10 x 10 grid 5 x 5 grid
0 1 2 3 4 | 5 6 7 8 9 0 1 2 3 4
10 11 12 13 14 | 15 16 17 18 19 5 6 7 8 9
20 21 22 23 24 | 25 26 27 28 29 10 11 12 13 14
30 31 32 33 34 | 35 36 37 38 39 15 16 17 18 19
40 41 42 43 44 | 45 46 47 48 49 20 21 22 23 24
---------------+---------------
50 51 52 53 54 | 55 56 57 58 59
60 61 62 63 64 | 65 66 67 68 69
70 71 72 73 74 | 75 76 77 78 79
80 81 82 83 84 | 85 86 87 88 89
90 91 92 93 94 | 95 96 97 98 99
Вот возможное решение:
Первый квадрат: [0, 15, 7, 19, 16, 1, 4, 12, 20, 23, 8, 5, 17, 2, 10, 22, 14, 11, 3, 18, 6, 9 , 24, 21, 13] ставит диагональный скачок до 5 (в 10x10) первого угла следующих 5 x 5.
Вторая площадь: [0, 12, 24, 21, 6, 9, 17, 2, 14, 22, 7, 15, 18, 3, 11, 23, 20, 5, 8, 16, 19, 4 , 1, 13, 10] ставит его с последним квадратом 25 в 10x10, что в двух прыжках от 55.
Третий квадрат: [0, 12, 24, 21, 6, 9, 17, 5, 20, 23, 8, 16, 19, 4, 1, 13, 10, 2, 14, 11, 3, 18 , 15, 7, 22] ставит его с последним квадратом 97 в 10x10, что в двух прыжках от 94.
Четвертый квадрат может быть любым правильным решением, потому что конечная точка не имеет значения. Однако отображение решения от 5х5 до 10х10 сложнее, так как квадрат начинается в противоположном углу. Вместо перевода побежал решить (24,5) и выбрал один наугад: [24, 9, 6, 21, 13, 10, 2, 17, 5, 20, 23, 8, 16, 1, 4, 12, 0, 15, 18, 3, 11, 14, 22, 7, 19]
Это должно быть возможно для всех программно, теперь, когда известно, что решения 5x5 действительны с законными перемещениями конечных точек в следующий угол 5x5. Количество решений 5x5 было 552, что означает, что хранить решения для дальнейшего расчета и переназначения довольно просто.
Если я не сделал это неправильно, это даст вам одно возможное решение (определенное выше 5x5 решения от одного до четырех соответственно):
def trans5(i, col5, row5):
if i < 5: return 5 * col5 + 50 * row5 + i
if i < 10: return 5 + 5 * col5 + 50 * row5 + i
if i < 15: return 10 + 5 * col5 + 50 * row5 + i
if i < 20: return 15 + 5 * col5 + 50 * row5 + i
if i < 25: return 20 + 5 * col5 + 50 * row5 + i
>>> [trans5(i, 0, 0) for i in one] + [trans5(i, 1, 0) for i in two] + [trans5(i, 0, 1) for i in three] + [trans5(i, 1, 1) for i in four]
[0, 30, 12, 34, 31, 1, 4, 22, 40, 43, 13, 10, 32, 2, 20, 42, 24, 21, 3, 33, 11, 14, 44, 41, 23, 5, 27, 49, 46, 16, 19, 37, 7, 29, 47, 17, 35, 38, 8, 26, 48, 45, 15, 18, 36, 39, 9, 6, 28, 25, 50, 72, 94, 91, 61, 64, 82, 60, 90, 93, 63, 81, 84, 54, 51, 73, 70, 52, 74, 71, 53, 83, 80, 62, 92, 99, 69, 66, 96, 78, 75, 57, 87, 65, 95, 98, 68, 86, 56, 59, 77, 55, 85, 88, 58, 76, 79, 97, 67, 89]
Может ли кто-нибудь еще раз проверить методологию? Я думаю, что это правильное решение и метод решения проблемы.