DFS+回溯法
提交代码:
class Solution {
public void solveSudoku(char[][] board) {
if (board == null || board.length == 0)
return;
fillBoard(board);
}
public boolean fillBoard(char[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] == '.') {
for (char num = '1'; num <= '9'; num++) {
if (isValid(board, i, j, num)) {
board[i][j] = num;
if (fillBoard(board))
return true;
else
board[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
public boolean isValid(char[][] board, int row, int column, char num) {
int i, j;
// check row
for (j = 0; j < 9; j++)
if (j != column && board[row][j] == num)
return false;
// check column
for (i = 0; i < 9; i++)
if (i != row && board[i][column] == num)
return false;
// check sub block
for (i = row / 3 * 3; i < row / 3 * 3 + 3; i++)
for (j = column / 3 * 3; j < column / 3 * 3 + 3; j++)
if ((i != row || j != column) && board[i][j] == num)
return false;
return true;
}
}
运行结果:

本文介绍了一种使用深度优先搜索(DFS)与回溯法解决数独问题的算法实现。通过递归地尝试填充空白格,并检查每一步是否符合数独规则,最终找到唯一解。代码中详细展示了如何验证每一步填充的合法性,包括行、列和子块的检查。
998

被折叠的 条评论
为什么被折叠?



