1
我想知道計算下面的代碼snipets的曼哈頓距離的區別。我有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]);
}
哪一個是正確的嗎?
謝謝
+1爲清晰的答案。我正要跳進去,但你釘了它。 –
感謝您的回覆。我正在求解NxN puzzel來將這些數字排列在一個NxN網格中。在我的文章中,你會看到當前節點,我必須計算從那裏到目標節點的距離。我必須用曼哈頓的方法來解決NxN的困惑。我應該使用哪一個? –
啊,好的。起初,我沒有從圖表中獲得。你可能會想使用第一個。 – meem1029