我实现了一个算法来解决 N-Puzzle 问题。该算法将使用其他算法,如 A* 和启发式双向搜索。一般来说,这两种算法都给了我很好的结果:A* 为一些超过 50 步的问题找到了解决方案,而我将另一个用于其他更大的解决方案。
问题如下:我使用曼哈顿距离作为两种算法的启发式算法,如果板子没有重复的瓷砖,似乎可以完美地工作。例如,对于 3x3,经典的 8 拼图起始板可以是 1,2,3|4,5,6|7,8,0,重复牌可以是:1,1,1|2,3,2|1 ,1,0。但是在这种情况下(当棋盘有重复的牌时)这些算法有效,但不一样,需要更多的时间并给出更大的解决方案。我修改了启发式函数,现在每个图块都采用到任何原始位置的最短路径,例如,如果有几个 2,则每个图块将计算曼哈顿距离到其最近的起始位置的距离为 2。
问题:任何人都知道这些问题的更好的启发式方法吗?对于重复元素的问题,这个曼哈顿距离启发式仍然可以接受吗?这是另一个与 N-Puzzle 不同的问题吗?
谢谢...