protected int calcManhattan(PuzzuleNode target, PuzzuleNode current) {
        int distance = 0;
        int[][] targetBoard = target.getPuzzuleBoard();
        int[][] currentBoard = current.getPuzzuleBoard();
        for ( int x = 0 ; x < targetBoard.length ; x ++ ) {
            for ( int y = 0 ; y < targetBoard[0].length ; y ++ ) {
                int targetValue = targetBoard[x][y];
                if ( PuzzuleNode.EMPTY == targetValue ) {
                    continue;
                }

                int dist = calcDistance(targetValue, x, y, currentBoard);
                distance += dist;
            }
        }

        return distance;
    }