我正在做一个需要使用 A* 算法的作业,但我不知道怎么做。
(0,0)
任务是,想象一个邮递员在一张网格地图上从无穷远处发送包裹。他在一天开始时列出一份任务,每个任务都分配了一个起点(x1,y1)
和一个终点(x2,y2)
。由于他不能同时处理两个任务,所以他必须将这些任务安排好,这样当他完成一个任务并从终点移动到下一个起点时,他可以拥有全天的最小移动距离. 距离计算为曼哈顿距离,即d(x1,y1,x2,y2) = abs(x2 - x1) + abs(y2 - y1)
。
样本输入:
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)
样本输出:
n nodes explored
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
在我看来,虽然这里提到了图表(或地图),但它不是必需的,因为唯一重要的部分是将这些任务排序为最小,而距离可以很容易地计算出来。一些愚蠢的事情会是排列并选择成本最低的一个,但永远不要采用它。我也尝试过 Greedy,但它可能无法获得全球最佳解决方案。
所以问题是,因为 A* 算法。是为寻路而设计的,我们如何将它或它的变体应用到寻找正确路径的问题上?