2011-11-23 84 views
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]); 
} 

哪一個是正確的嗎?

謝謝

回答

4

第一個假設邊框不能纏繞。第二個假設是,如果你走到右邊的右邊,你會到達左邊。我不知道第三人正在做什麼與曼哈頓距離有關。對你來說正確的一個取決於你想要解決什麼問題。

+1

+1爲清晰的答案。我正要跳進去,但你釘了它。 –

+0

感謝您的回覆。我正在求解NxN puzzel來將這些數字排列在一個NxN網格中。在我的文章中,你會看到當前節點,我必須計算從那裏到目標節點的距離。我必須用曼哈頓的方法來解決NxN的困惑。我應該使用哪一個? –

+0

啊,好的。起初,我沒有從圖表中獲得。你可能會想使用第一個。 – meem1029