【问题标题】:Manhattan Distance Clarification曼哈顿距离说明
【发布时间】: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]);
}

哪一个适合我?

谢谢

【问题讨论】:

    标签: java algorithm


    【解决方案1】:

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

    【讨论】:

    • +1 以获得清晰的答案。我正要跳进去,但你成功了。
    • 感谢您的回复。我正在解决 NxN puzzel 以将数字排列在 NxN 网格中。在我的帖子中,您会看到当前节点,我必须计算从那里到目标节点的距离。我必须使用 manhattan heureustic 解决 NxN 谜题。那么我应该使用哪一个?
    • 啊,好的。起初我没有从图表中得到这一点。您可能想使用第一个。
    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多