def solve_sudoku(grid):
def is_valid(row, col, num):
# 检查数字在当前行和列中是否有效
for i in range(9):
if grid[row][i] == num or grid[i][col] == num:
return False
# 检查数字在当前3x3子网格中是否有效
start_row, start_col = (row // 3) * 3, (col // 3) * 3
for i in range(3):
for j in range(3):
if grid[start_row + i][start_col + j] == num:
return False
return True
def backtrack(row, col):
# 如果我们已经填满了所有单元格,谜题就解决了
if row == 9:
return True
# 如果我们已经到达当前行的末尾,移动到下一行
if col == 9:
return backtrack(row + 1, 0)
# 如果当前单元格已经填充,移动到下一个单元格
if grid[row][col] != 0:
return backtrack(row, col + 1)
# 尝试用1到9的数字填充当前单元格
for num in range(1, 10):
if is_valid(row, col, num):
grid[row][col] = num
if backtrack(row, col + 1):
return True
grid[row][col] = 0
# 如果没有找到有效数字,回溯
return False
# 验证输入网格
if not all(len(row) == 9 and all(0 <= cell <= 9 for cell in row) for row in grid):
return None
# 开始回溯算法
if backtrack(0, 0):
return grid
else:
return None