Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 棋盘上从a到B的最便宜路径。转弯和移动成本不同_Java_Algorithm - Fatal编程技术网

Java 棋盘上从a到B的最便宜路径。转弯和移动成本不同

Java 棋盘上从a到B的最便宜路径。转弯和移动成本不同,java,algorithm,Java,Algorithm,我们有一个x和y坐标为正的棋盘 0,0 1,0 2,0 ... 0,1 1,1 2,1 ... 0,2 1,2 2,2 ... ... ... ... ... 我们必须找到从A到B的最便宜的路线,因为每一步的转弯成本为100能源,移动成本为500 我已经调查过了,但我认为这与我的问题无关 最简单的解决方法是什么?最少的移动次数总是| XB-XA |+| YB-YA |,而且我们总是只需一圈就可以做到 示例:从(1,2)移动到(4,6): 我们不能少走几步,只能多转几圈。你应该使

我们有一个x和y坐标为正的棋盘

0,0  1,0  2,0 ...
0,1  1,1  2,1 ...
0,2  1,2  2,2 ...
...  ...  ... ...
我们必须找到从A到B的最便宜的路线,因为每一步的转弯成本为100能源,移动成本为500

我已经调查过了,但我认为这与我的问题无关


最简单的解决方法是什么?

最少的移动次数总是| XB-XA |+| YB-YA |,而且我们总是只需一圈就可以做到

示例:从(1,2)移动到(4,6):


我们不能少走几步,只能多转几圈。

你应该使用A*算法

为了计算G成本,你可以使用你的值,但我建议1用于北移、东移、南移和西移。sqrt(1*1+1*1)=sqrt(2)=1.14,用于向东北、东南、西南和西北移动

好图坦卡蒙(试过自己):

当您想要的不仅仅是一条路径时,另一个很好的提示: (路径优化,通常本图坦卡蒙中描述的方法会使路径更快,本图坦卡蒙仅在角色可以向8个以上方向移动时才有效)


读一下迈克的故事,我会读的,谢谢!这个问题要么微不足道,要么没有很好地说明。无障碍矩形场地上最便宜的路径是水平,然后垂直(反之亦然);不考虑初始方向,只需转一圈,然后
dx+dy
移动。是的,但这始终是最便宜的路线吗?考虑到转动的成本比移动一步要低。除非棋子可以“摆动”到目标(比如,3.5圈将使一个棋子前进相当于一步),是的,它总是最便宜的。拿出你的棋盘,自己数数。如果球场上有障碍,那就完全不同了@Andreas_D的回答告诉你同样的事情。对于A*你通常使用hueristic,这是一种对距离目标的理想估计,它总是低估(或准确)。在没有障碍物的棋盘上,启发式是距离目标的距离。所以A*太过分了。我应该说它没有障碍,对不起。尽管如此,还是要感谢你,以后可能会添加障碍物。初始定向可能会起作用,并且需要不止一个回合。在这种情况下,你只需要转弯,或者如果你面对的是一个最终需要走的方向,那么先走那条路。如果A、B和初始方向是随机的,你需要0圈的几率很小,略高于50%的几率需要1圈,略低于50%的几率需要2圈。
3 moves right: 1500
1 turn:         100
4 moves down:  2000
               ----
               3600