我在JS中构建了一个15拼图但我的随机拼图生成了一个无法解决的难题。这可能是因为我不是计算机科学的负责人,但我不知道如何计算代码中的排列数量来计算倒数的数量。我想知道如何编写我的代码,以便我可以测试我的拼图的任何给定的开始状态是可解决的。我已经在已发布的应用程序中看到了其他15个无法解决的谜题,所以看起来我并不是唯一存在问题的谜题。
我已经看过这篇文章了,但是它停止在CS级别,我正在寻找一个代码实现,可以帮助我更好地理解这个: 15 Puzzle Heuristic
我正在使用JS,但任何语言的帮助和解释都会有很大的帮助。
答案 0 :(得分:3)
可解决性算法基于反演的奇偶校验,并在15 Puzzle - Wolfram Math World中进行了解释。转换成代码应该不会太难。 IIRC在一个不可解的起点上交换两个相邻的方格使其可以解决,但你需要确认。
请注意,这是一个确定拼图是否可以解决的精确算法,而不是用于指导解决方案中的步骤序列的启发式算法。
答案 1 :(得分:2)
我在评论中不知道的是什么,但不确定正确的方法是否正确:
由于你是从一个有效的棋盘开始,然后应用一组强制误导,你总会得到一个完全合法的开始游戏。