如何以编程方式在代码中创建一个有效的15谜题

时间:2011-10-09 03:50:22

标签: javascript algorithm heuristics

我在JS中构建了一个15拼图但我的随机拼图生成了一个无法解决的难题。这可能是因为我不是计算机科学的负责人,但我不知道如何计算代码中的排列数量来计算倒数的数量。我想知道如何编写我的代码,以便我可以测试我的拼图的任何给定的开始状态是可解决的。我已经在已发布的应用程序中看到了其他15个无法解决的谜题,所以看起来我并不是唯一存在问题的谜题。

我已经看过这篇文章了,但是它停止在CS级别,我正在寻找一个代码实现,可以帮助我更好地理解这个: 15 Puzzle Heuristic

我正在使用JS,但任何语言的帮助和解释都会有很大的帮助。

2 个答案:

答案 0 :(得分:3)

可解决性算法基于反演的奇偶校验,并在15 Puzzle - Wolfram Math World中进行了解释。转换成代码应该不会太难。 IIRC在一个不可解的起点上交换两个相邻的方格使其可以解决,但你需要确认。

请注意,这是一个确定拼图是否可以解决的精确算法,而不是用于指导解决方案中的步骤序列的启发式算法。

答案 1 :(得分:2)

我在评论中不知道的是什么,但不确定正确的方法是否正确:

  1. 从“正确的”15位序列/板
  2. 开始
  3. 生成随机数量的“错位配置”,您可以将其应用于主板
  4. 根据您生成的随机数生成N个有效错位的列表
  5. 你现在应该有一个有效的游戏。
  6. 由于你是从一个有效的棋盘开始,然后应用一组强制误导,你总会得到一个完全合法的开始游戏。