数独问题---编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗

时间:2025-03-29 07:00:11
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; } }