骑士巡游问题中xMove、yMove数组的来源及必要性咨询
骑士巡游偏移数组相关答疑
两组整数的来源
你看到的xMove和yMove数组完全来自国际象棋里骑士的移动规则:骑士走“日”字,从任意坐标(x,y)出发,所有合法的位移只有8种组合:
- x坐标+2,y坐标+1
- x坐标+1,y坐标+2
- x坐标-1,y坐标+2
- x坐标-2,y坐标+1
- x坐标-2,y坐标-1
- x坐标-1,y坐标-2
- x坐标+1,y坐标-2
- x坐标+2,y坐标-1
两个数组的对应位置取值,就是把这8种合法位移的x、y方向偏移量分别提取出来存成了数组,方便用循环遍历所有可能的走法,避免重复写多段逻辑相同的代码。
这两个数组不是求解必需的组成
这个写法只是编码层面的优化方案,不是问题求解逻辑的必要部分:
- 你完全可以不使用数组存储偏移量,手动给8种走法各写一段独立的判断逻辑,功能和性能和用数组遍历没有任何区别,只是代码会更冗长,维护成本更高。
- 就算使用数组存储偏移量,里面的数值顺序也可以任意调整,只要保证8种合法位移没有遗漏、没有重复即可。不同的偏移顺序只会影响回溯算法搜索解的路径和耗时,不会影响最终能否找到有效解。很多优化的骑士巡游算法(比如Warnsdorff启发式规则)还会动态调整走法的尝试顺序,进一步提升搜索效率,也不会固定使用你示例里的偏移顺序。
内容的提问来源于stack exchange,提问作者captaincabbage
相关产品推荐
相关产品推荐

