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 void solveSudoku(char[][] board) {
healper(board);
}
public boolean healper(char[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == '.') {
for (char z = '1'; z <= '9'; z++) {
if (isValid(board, i, j, z)) {
board[i][j] = z;
if (healper(board))
return true;//有解
else
board[i][j] = '.';// 回退
}
}
return false;
}
}
}
return true;
}
private boolean isValid(char[][] board, int i, int j, char c) {
// 检查行
for (int row = 0; row < 9; row++)
if (board[row][j] == c)
return false;
// 检查列
for (int col = 0; col < 9; col++)
if (board[i][col] == c)
return false;
// 检查9宫格
for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row++)
for (int col = j / 3 * 3; col < j / 3 * 3 + 3; col++)
if (board[row][col] == c)
return false;
return true;
}