【发布时间】:2011-11-23 18:02:15
【问题描述】:
我想知道计算以下代码片段的曼哈顿距离的区别。我有 2D 数组 int[][] state 并想计算从当前节点到目标节点的 manahattan 距离:
示例:
当前节点
0 1 3
4 2 5
7 8 6
0 == 空图块
我现在必须计算从这个节点到目标节点的曼哈顿距离:
1 2 3
4 5 6
7 8 0
以下是我找到的一些示例:
1) 这个用x和y坐标计算距离
public int manhattan(Node currentNode, Node goalNode) {
return Math.abs(currentNode.x - goalNode.x) + Math.abs(currentNode.y - goalNode.y);
}
2)这个使用了坐标,但做了一些我不明白含义的计算。
private static int manhattan(int[] pos, int tile) {
int[] dest = new int[] { (tile - 1) % size, (tile - 1) / size };
return Math.abs(dest[0] - pos[0]) + Math.abs(dest[1] - pos[1]);
}
3)这个人使用单元格中的数字进行计算
public int Manhattan(Node current Node goal){
int dist = 0;
for(int x = 0; x < current.row; x++)
for(int y = 0; y < current.col; y++)
dist += Math.abs(current.state[x][y] - goal.state[x][y]);
}
哪一个适合我?
谢谢
【问题讨论】: