我必须编写一个程序来计算完成所有交付的最短路径。地图表示为 x,y 坐标,路径是使用曼哈顿距离计算的(所以沿着 x 走,然后沿着 y 走)。起点始终是 (0, 0),快递员可以在任何点结束。快递员在任何给定时间只能携带 1 个包裹。
这可以使用 A* 搜索算法来实现,我的问题是由于 A* 算法是一个 I 形成的搜索,它需要知道其 statusNode 的启发式值。对于这个问题,什么是好的启发式实现?甚至是启发式价值的想法?
我有一个示例输入:
Job 3 3 to 5 3 # there is a job from (3,3) to (5,3)
Job 1 1 to 9 2 # there is a job from (1,1) to (9,2)
Job 3 5 to 2 7 # there is a job from (3,5) to (2,7)
Job 5 5 to 5 7 # there is a job from (5,5) to (5,7)
和输出:
Cost = 31
Move from 0 0 to 1 1
Carry from 1 1 to 9 2
Move from 9 2 to 3 3
Carry from 3 3 to 5 3
Move from 5 3 to 5 5
Carry from 5 5 to 5 7
Move from 5 7 to 3 5
Carry from 3 5 to 2 7
我目前的搜索方法是:
我有 jobToBeDone 和 jobDone 的列表
Initialise 当前位置的初始值为 0, 0
检查是否所有作业都已完成
如果不是,对于所有剩余的工作,计算总成本=到达那里的路径 + 工作的一些启发式价值。
将它们放在jobsToBeDone 中并以最短路径排序具有较低的索引(如java 中的priorityQueue)。
通过将当前位置更新到第一个索引中的作业来重复第 2 条指令。