https://oj.leetcode.com/problems/sudoku-solver/
http://blog.csdn.net/linhuanmars/article/details/20748761
Public class solution { public void solvesudoku (char[][] Board) { resolve (board, 0, 0); } private boolean resolve (Char[][] b, // current board int i, // current row &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;INT&NBSP;J) // Current col { // goes to next row if (j == 9) &nbSp; return resolve (b, i + 1, 0); // no further to try if (i == 9) return true; // a pre-defined, goes to next if (B[i][j] != '. ') return resolve (b, i , &NBSP;J&NBSP;+&NBSP;1); // possible numbers for&nbSP; (char k = ' 1 ' ; k <= ' 9 ' ; k ++) &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;{&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;B[I][J] = k; if (Checkrow (b), i) && checkcol (b, j) && checkblk (b, i, j)) { if (Resolve (b, i, j + 1)) return true; // else this assignment is not good for following Iterations. } b[i][j] = '. '; } return False; } // check row in b in valid private boolean checkrow (Char[][] b, int row) { boolean[] c = new boolean[9]; for (int i = 0 ; i < 9 ; i ++) { if (b[row][i] != '. ') { int v = b[row][i] - ' 1 '; if (C[v]) return false; else c[v] = true; } } return true; } // check column in b in valid private boolean checkcol (Char[][]&nbsP;b, int col) { boolean[] c = new boolean[9]; for (int i = 0 ; i < 9 ; i ++) { if (b[i][col] != '. ') { int v = b[i][col] - ' 1 '; if (C[v]) return false; else c[v] = true; } } return true; } // check block &NBSP;IN&NBSP;B&NBSP;IS&NBSP;VALID&NBSP;&NBSP;&NBSP;&NBSP;PRIVATE&NBSP;BOOLEAN&NBSP;CHECKBLK (Char[][] b, int row, int col) { int rstart = (row / 3) * 3; int cstart = (col / 3) * 3; boolean[] c = new boolean[9]; for (int i = 0 ; i < 3 ; i ++) { for (int j = 0 ; j < 3 ; j ++) { if (b[i + rstart][j + cstart] != '. ') { int v = b[i + rstart][j + cstart] - ' 1 '; if (C[v]) return false; else c[v] = true; } } } return true; }}
[Leetcode]37 Sudoku Solver