gpt4 book ai didi

java - 曼哈顿距离澄清

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:18 26 4
gpt4 key购买 nike

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

当前节点

0 1 3
4 2 5
7 8 6

0 == 空图 block

我现在必须计算从这个节点到目标节点的曼哈顿距离:

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 - 曼哈顿距离澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8238148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com