我在Java中实现了以下内容:
[1,1][1,2][1,3][1,4]
[2,1][2,2][ B ][2,4]
[ A ][3,2][3,3][3,4]
我希望能够计算[A]和[B]之间的最小距离,而不是对角移动,我已经在线搜索,但我不确定如何说出我在寻找的东西对于。到目前为止,我已经能够使用以下方法计算对角线距离:
dMin = Math.min(dMin, Math.abs((xDistance - yDistance)));
有人可以给我一个我可以在网上查找的算法吗?任何帮助表示赞赏。谢谢你的时间:))
预期输出为:
Distance = 3 //Not Distance = 2 (as it would be diagonally).
答案 0 :(得分:10)
它被称为Manhattan Distance,可以通过以下方式轻松计算:
distance = abs(ydistance) + abs(xdistance)
也就是说,您必须垂直行进的单元格数量,以及您必须水平行进的单元格数量,就像乘坐出租车穿过城市街道网格一样。
答案 1 :(得分:5)
你想要点的x值之间的绝对差值,加上点的y值之间的绝对差值。
即:
dMin = Math.abs(A.x - B.x) + Math.abs(A.y - B.y)
这称为曼哈顿距离
答案 2 :(得分:2)
您希望X
轴上的差异加上Y
轴上的差异。像这样:
int minDistance = Math.abs(A.x - B.x) + Math.abs(A.y - B.y);