You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复基于回溯法的Python数独求解器返回空的问题?

解决你的数独求解器返回空结果的问题

嘿,我看了你的数独求解器代码片段,发现几个关键问题导致它返回空结果并提示数独无效,咱们一步步来修复:

1. 全局变量e的坑

你用了全局列表e来存储空单元格的坐标,但回溯法是递归执行的,这个全局变量会被后续的checkEmpty调用覆盖,导致之前的递归层拿到错误的单元格坐标,直接打乱了回溯逻辑。

咱们把checkEmpty改成直接返回坐标元组(没有空单元格时返回None),彻底避免全局变量的干扰:

def checkEmpty(): 
    for i in range(9): 
        for j in range(9): 
            if board[i][j] == 0: 
                return (i, j)  # 返回空单元格的(row, col)
    return None  # 没有空单元格了

2. 缺失的合法性检查函数

从你的代码片段看,应该还缺少一个验证数字是否能填入当前单元格的函数。这个函数要检查三个维度:当前行、当前列、所在的3x3小宫格不能有重复数字:

def is_valid(board, row, col, num):
    # 检查当前行是否已有该数字
    for col_idx in range(9):
        if board[row][col_idx] == num:
            return False
    # 检查当前列是否已有该数字
    for row_idx in range(9):
        if board[row_idx][col] == num:
            return False
    # 检查所在3x3宫格是否已有该数字
    box_start_row = (row // 3) * 3
    box_start_col = (col // 3) * 3
    for i in range(3):
        for j in range(3):
            if board[box_start_row + i][box_start_col + j] == num:
                return False
    return True

3. 完整的回溯求解函数

现在把这些整合起来,写一个递归的回溯求解函数:

def solve_sudoku(board):
    empty_cell = checkEmpty()
    if not empty_cell:
        return True  # 没有空单元格,说明数独已经解出来了
    row, col = empty_cell
    # 尝试填入1-9的数字
    for num in range(1, 10):
        if is_valid(board, row, col, num):
            board[row][col] = num
            # 递归求解,如果后续能解出来,就返回True
            if solve_sudoku(board):
                return True
            # 回溯:如果当前数字导致后续无解,把单元格恢复为空
            board[row][col] = 0
    # 所有数字都试了,都无解,说明这个数独确实无效
    return False

测试你的数独

最后调用这个函数并打印结果:

board = [[3,0,6,5,0,8,4,0,0], [5,2,0,0,0,0,0,0,0], [0,8,7,0,0,0,0,3,1], [0,0,3,0,1,0,0,8,0], [9,0,0,8,6,3,0,0,5], [0,5,0,0,9,0,6,0,0], [1,3,0,0,0,0,2,5,0], [0,0,0,0,0,0,0,7,4], [0,0,5,2,0,6,3,0,0]]

if solve_sudoku(board):
    print("求解成功:")
    for row in board:
        print(row)
else:
    print("数独无效,无解")

运行这段代码后,你的数独应该能正常解出来,不会再返回空结果啦。

内容的提问来源于stack exchange,提问作者user8502474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:40:37