我试着用对角线和两点间直线距离的启发式方法写一个星型算法。然而,在这种情况下,路径并不是最短的
去(2,2)—>(3,2)—>(4,2)—>(5,2)会更快,但它选择了切割。
我不知道我的理解有什么问题,因为这就是当我想出来的时候它是如何工作的。
我的理解是:
从(1,1)开始发现(2,2)是最好的
发现(3,3)是最好的,发现(4,3)是最好的,因为你不能偷工减料
找到(5,3)为最佳,但将(5,2)的f值计算为x
无法转到(6,2)并计算f(5,2)作为y>x,因此路径回溯到(4,3)
因为(5,3)不再在开放集合中,所以选择下一个最佳(5,2)
剩下的路是好的,没有回溯,因为没有“死胡同”被满足。
它应该意识到的是f(5,2)小于(4,2),而f(4,2)小于(3,2),因为f(5,2)选择取(3,3)后就再也没有计算过。
这到底是怎么回事?
编辑:水平/垂直阶梯成本为1,对角线阶梯成本为2
最佳答案
多亏亨利在评论中,推理是关闭的,因为(4,3)—>(5,2)的f值会比(2,2)—>(3,2)高,所以它应该下降(3,2)
也就是说,下一个要计算的节点是从已排序的打开节点列表中选择的,而不是一个节点列表,其中的值在输入时进行了排序(而不是添加了已排序列表的堆栈)
关于algorithm - 星型算法最有效的路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41994875/