Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'
.
You may assume that there will be only one unique solution.

A sudoku puzzle...

...and its solution numbers marked in red.
- public class Solution {
- boolean rowValid[][]=new boolean[9][10];
- boolean columnValid[][]=new boolean[9][10];
- boolean subBoardValid[][]=new boolean[9][10];
- public void solveSudoku(char[][] board) {
- for(int i = 0; i < 9; i++)
- for(int j = 0; j < 9; j++)
- if(board[i][j] != '.')
- fill(i, j, board[i][j] - '0');
- solve(board, 0);
- }
-
- boolean solve(char[][] board, int index){
- if(index > 80)return true;
- int row = index / 9, col = index - 9*row;
- if(board[row][col] != '.')
- return solve(board, index+1);
- for(int val = '1'; val <= '9'; val++){
- if(isValid(row, col, val-'0')){
- board[row][col] = (char) val;
- fill(row, col, val-'0');
- if(solve(board, index+1))return true;
- clear(row, col, val-'0');
- }
- }
- board[row][col] = '.';
- return false;
- }
-
-
- boolean isValid(int row, int col, int val){
- if(!rowValid[row][val] &&
- !columnValid[col][val] &&
- !subBoardValid[row/3*3+col/3][val])
- return true;
- return false;
- }
-
-
- void fill(int row, int col, int val){
- rowValid[row][val] = true;
- columnValid[col][val] = true;
- subBoardValid[row/3*3+col/3][val] = true;
- }
-
-
- void clear(int row, int col, int val){
- rowValid[row][val] = false;
- columnValid[col][val] = false;
- subBoardValid[row/3*3+col/3][val] = false;
- }
- }
原文链接http://blog.youkuaiyun.com/crazy__chen/article/details/45695711