Algorithm 最有效路径的星型算法
我试着用对角线和两点间直线距离的启发式编写一个星形算法。然而,在这种情况下,路径并不是最短的 走(2,2)->(3,2)->(4,2)->(5,2)会更快,但它选择了切割 我想不出我的理解有什么问题,因为当我想出来的时候,它实际上是这样工作的 我的理解是:Algorithm 最有效路径的星型算法,algorithm,Algorithm,我试着用对角线和两点间直线距离的启发式编写一个星形算法。然而,在这种情况下,路径并不是最短的 走(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
编辑:水平/垂直方向的阶跃成本为1,对角线方向的阶跃成本为sqrt(2)多亏了Henry在评论中的解释,因为(4,3)->(5,2)的f值高于(2,2)->(3,2),所以它应该下降(3,2)
也就是说,下一个要计算的节点是从已排序的开放节点列表中选择的,而不是一组在输入时已排序的值的节点列表(不是添加了已排序列表的堆栈)由于Henry在注释中的作用,由于(4,3)->(5,2)的f值高于(2,2)->(3,2),因此推理是无效的,所以它应该下降(3,2)
也就是说,要评估的下一个节点是从已排序的开放节点列表中选择的,而不是在输入时已排序值组的节点列表(不是添加了已排序列表的堆栈)从(2,2)到(3,3)的实际成本是多少?它是1还是sqrt(2)?sqrt(2)。启发式将是sqrt(4^2+2^2),在这种情况下,您的实现中有一个bug。对不起?我列出的步骤是在我脑海中发生的,无论代码是什么,所以。。。你能告诉我我推理的哪一步是错的吗?A*,如果做得正确,会找到最短的路径。您显示的路径不是最短的。在您的示例推理中,您没有显示开放集中的所有节点,因此很难判断错误出在哪里。从(2,2)到(3,3)的实际成本是多少?它是1还是sqrt(2)?sqrt(2)。启发式将是sqrt(4^2+2^2),在这种情况下,您的实现中有一个bug。对不起?我列出的步骤是在我脑海中发生的,无论代码是什么,所以。。。你能告诉我我推理的哪一步是错的吗?A*,如果做得正确,会找到最短的路径。您显示的路径不是最短的。在您的示例推理中,您没有显示开放集中的所有节点,因此很难判断错误出在哪里。