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.
典型的回溯法解决数独问题。使用递归来求解。private boolean isValidSudoku(char[][] board, int row, int col) { int len = 9; for (int i = 0; i < len; i++) { if (i != row) { if (board[row][col] == board[i][col]) { return false; } } } for (int j = 0; j < len; j++) { if (j != col) { if (board[row][col] == board[row][j]) { return false; } } } int curRowStart = (row / 3) * 3; int curColStart = (col / 3) * 3; for (int i = curRowStart; i < curRowStart + 3; i++) { for (int j = curColStart; j < curColStart + 3; j++) { if (!(i == row && j == col)) { if (board[i][j] == board[row][col]) { return false; } } } } return true; } private boolean recallSudoku(char[][] board) { int len = 9; for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { if (board[i][j] == '.') { for (int k = 0; k < len; k++) { board[i][j] = (char)('1' + k); if (isValidSudoku(board, i, j)) { if (recallSudoku(board)){ return true; } } board[i][j] = '.'; } return false; } } } return true; } public void solveSudoku(char[][] board) { recallSudoku(board); }
原文地址:http://blog.csdn.net/u010378705/article/details/34855619