我使用广度优先搜索构建了一个 8 谜题求解器。我现在想修改代码以使用启发式方法。如果有人能回答以下两个问题,我将不胜感激:
可解性
我们如何决定一个 8 谜题是否可解?(给定一个起始状态和一个目标状态)这是维基百科所说的:
不变量是所有16个方格排列的奇偶性加上右下角空方格的出租车距离(行数加列数)的奇偶性。
不幸的是,我无法理解那是什么意思。理解起来有点复杂。有人可以用更简单的语言解释吗?
最短的解决方案
给定一个启发式,是否保证使用 A* 算法给出最短的解决方案?更具体地说,打开列表中的第一个节点是否总是有一个深度(或如此胖的移动次数),它是打开列表中所有节点的深度中的最小值?
启发式是否应该满足某些条件才能使上述陈述为真?
编辑:一个可接受的启发式方法如何总是提供最佳解决方案?我们如何测试启发式是否可以接受?
我将使用此处列出的启发式方法
Manhattan Distance
Linear Conflict
Pattern Database
Misplaced Tiles
Nilsson's Sequence Score
N-MaxSwap X-Y
Tiles out of row and column
来自 Eyal Schneider 的澄清: