title: Calculating Manhattan Distance within a 2d array
body: <p>I am writing a program to solve an nxn 8 puzzle problem. I'm having difficulty with my Manhattan calculation function being off by two from the puzzle I'm testing my program with. This will eventually be expanded to use the A* pathfinding algorithm, but I'm not there yet.</p>
  
  <p>Here is my function(which is based on the initial state of the board and not taking into account the amount of moves taken so far): </p>
  
  <pre><code>// sum of Manhattan distances between blocks and goal
  public int Manhattan()  // i don't think this is right yet - check with vince/thomas
  {
      int distance = 0;
  
      // generate goal board
      int[][] goal = GoalBoard(N);
  
      // iterate through the blocks and check to see how far they are from where they should be in the goal array
      for(int row=0; row&lt;N; row++){
          for(int column=0; column&lt;N; column++){
              if(blocks[row][column] == 0)
                  continue;
              else
                  distance += Math.abs(blocks[row][column]) + Math.abs(goal[row][column]);
          }
      }
  
      distance = (int) Math.sqrt(distance);
  
      return distance; // temp
  }
  </code></pre>
  
  <p>This is the example I'm working off of:</p>
  
  <pre><code> 8  1  3        1  2  3     1  2  3  4  5  6  7  8    1  2  3  4  5  6  7  8
   4     2        4  5  6     ----------------------    ----------------------
   7  6  5        7  8        1  1  0  0  1  1  0  1    1  2  0  0  2  2  0  3
  
   initial          goal         Hamming = 5 + 0          Manhattan = 10 + 0
  </code></pre>
  
  <p>My Hamming calculation is correct and returns 5, but my Manhattan returns 8 instead of 10. What am I doing wrong?</p>
  
  <p>This is the output of my program:</p>
  
  <pre><code>Size: 3
  Initial Puzzle: 
   8  1   3   
   4  0   2   
   7  6   5   
  
  Is goal board: false
  
  Goal Array: 
   1  2   3   
   4  5   6   
   7  8   0   
  Hamming: 5
  Manhatten distance: 8
  Inversions: 12
  Solvable: true
  </code></pre>