我实现了一个算法来解决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不同吗?
...谢谢