曼哈顿距离澄清

我想知道计算下面的代码snipets曼哈顿距离的区别。 我有二维数组int[][] state并且想要计算从当前节点到目标节点的曼哈顿距离:例如:

当前节点

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]);
}

哪一个对我是正确的?

谢谢


第一个是假设边界不能缠绕。 第二个假设是,如果你走到右边的右边,你会到达左边。 我不知道第三人正在做什么与曼哈顿距离有关。 对你来说正确的一个取决于你想要解决什么问题。

链接地址: http://www.djcxy.com/p/65557.html

上一篇: Manhattan Distance Clarification

下一篇: How is Manhattan distance an admissible heuristic?