我决定看看这个问题,看看我是否可以把它分解成 5x5 的解决方案,一个解决方案的结尾从另一个角落跳开。
第一个假设是 5x5 是可解的。它很快。
所以我运行了solve(0,5) 并查看了结果。我在 Excel 中绘制了一个 10x10 编号的网格,并带有一个 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] 将它放在 10x10 中的最后一个 25 格,距离 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] 将它放在 10x10 中的最后一个格子 97 处,距离 94 两跳。
第四方阵可以是任何有效的解决方案,因为终点并不重要。然而,解决方案从 5x5 到 10x10 的映射更难,因为正方形从对角开始。代替翻译,运行solve(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]
有人可以仔细检查方法吗?我认为这是解决问题的有效解决方案和方法。