2016-07-05 8 views
1

Я в настоящее время работаю с SudokuChecker Я хочу проверить подполья [3x3] судоку. Следующий код:Sudoku count подполе

int[][] field = new field[9][9]; 
int wrongNumbers = 0; 
for (int i = 0; i < 9; i += 3) { 
    for (int j = 0; j < 9; j += 3) { 

     // Check subfield by using an array 
     int arr[] = new int[10]; 
     for (int k = 0; k < 3; k++) { 
      for (int l = 0; l < 3; l++) { 
       arr[field[i + k][j + l]]++; 
      } 
     } 

     for (int k = 1; k < arr.length; k++) { 
      wrongNumbers += arr[k] > 1 ? arr[k] - 1 : 0; 
     } 
    } 
} 

Я хочу знать, есть ли улучшения для данного кода? (я не говорю о том, чтобы 3, 9 и т.д. константа)

ответ

0

Я нашел очень хороший ответ в Codefights от thucnguyen:

boolean sudoku(int[][] grid) { 
    for (int i = 0; i <9; i++) { 
     int row = 0, col = 0, group = 0; 
     for (int j = 0; j <9; j++) { 
      // check for row i 
      row += grid[i][j]; 

      // check for col i 
      col += grid[j][i]; 

      // check for sub-grid i 
      group += grid[i/3 * 3 + j/3][i % 3 * 3 + j % 3]; 
     } 

     if (row != 45 || col != 45 || group != 45) return false; 
    } 

    return true; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^