数独问题---编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗
class Solution {
char board[][];
boolean[][] rowsUsed = new boolean[9][10];
boolean[][] colsUsed = new boolean[9][10];
boolean[][] cubeUsed = new boolean[9][10];
public void solveSudoku(char[][] board) {
this.board = board;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
int index = board[i][j] - '0';
rowsUsed[i][index] = true;
colsUsed[j][index] = true;
cubeUsed[cubeCount(i, j)][index] = true;
}
}
}
backTracking(0, 0);
}
public boolean backTracking(int row, int col) {
while (row < 9 && board[row][col] != '.') {
row = col == 8 ? row + 1 : row;
col = col == 8 ? 0 : col + 1;
}
if (row == 9) {
return true;
}
for (int num = 1; num <= 9; num++) {
if (rowsUsed[row][num] || colsUsed[col][num] || cubeUsed[cubeCount(row, col)][num]) {
continue;
}
board[row][col] = (char) (num + '0');
rowsUsed[row][num] = colsUsed[col][num] = cubeUsed[cubeCount(row, col)][num] = true;
if (backTracking(row, col)) {
return true;
}
rowsUsed[row][num] = colsUsed[col][num] = cubeUsed[cubeCount(row, col)][num] = false;
board[row][col] = '.';
}
return false;
}
public int cubeCount(int row, int col) {
int r = row / 3;
int c = col / 3;
return r * 3 + c;
}
}