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.
思路:回溯法,遇到'.'就从1到9尝试,直到找到一个结果,返回。
public class Solution {
public void solveSudoku(char[][] board) {
solve(board, 0);
}
public boolean solve(char[][] board, int index) {
if (index == 81) {
return true;
}
int row = index / 9;
int col = index % 9;
if (board[row][col] == '.') {
for (int i = 1; i <= 9; i++) {
board[row][col] = (char) (i + '0');
if (check(board, row, col)) {
if (solve(board, index + 1)) {
return true;
}
}
board[row][col] = '.';
}
} else {
if (solve(board, index + 1)) {
return true;
}
}
return false;
}
public boolean check(char[][] board, int row, int col) {
for (int i = 0; i < 9; i++) {
if (board[row][i] == board[row][col] && i != col) {
return false;
}
if (board[i][col] == board[row][col] && i != row) {
return false;
}
}
for (int i = (row / 3) * 3; i < (row / 3 + 1) * 3; i++) {
for (int j = (col / 3) * 3; j < (col / 3 + 1) * 3; j++) {
if ((i != row) && (j != col) && (board[row][col] == board[i][j])) {
return false;
}
}
}
return true;
}
}