编写一个程序,通过已填充的空格来解决数独问题。
一个数独的解法需遵循如下规则:
- 数字
1-9在每一行只能出现一次。 - 数字
1-9在每一列只能出现一次。 - 数字
1-9在每一个以粗实线分隔的3x3宫内只能出现一次。
空白格用 '.' 表示。
![]()
一个数独。
![]()
答案被标成红色。
Note:
- 给定的数独序列只包含数字
1-9和字符'.'。 - 你可以假设给定的数独只有唯一解。
- 给定数独永远是
9x9形式的。
public class Solution {
public void solveSudoku(char[][] board) {
solve(board);
}
private boolean solve(char[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j ++) {
if (board[i][j] =='.') {
for (char k = '1'; k <= '9'; k++) {
board[i][j] = k;
if (isValid(board, i, j) && solve(board)) {
return true;
}
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
private boolean isValid(char[][] board,int x, int y ) {
boolean [][] square = new boolean[9][9];
for (int i = 0; i < 9; i++) {
if (y != i &&board[x][y] == board[x][i]){
return false;
}
}
for (int i = 0; i < 9; i++) {
if (x != i &&board[i][y] == board[x][y]){
return false;
}
}
for (int i = (x / 3) * 3; i < (x / 3) * 3 + 3; i++) {
for (int j = (y /3) * 3; j < (y / 3) *3 + 3; j++) {
if (x != i && y != j && board[i][j] == board[x][y]) {
return false;
}
}
}
return true;
}
}
数独求解算法

本文介绍了一种通过回溯法解决数独问题的程序实现。该算法遵循数独的基本规则,确保数字1-9在每一行、每一列及每个3x3的宫内仅出现一次。文章提供了一个完整的Java代码示例,展示了如何使用递归和有效性检查来找到数独的解决方案。
558

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



