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

如何将已求解数独网格保存为全局变量?解决外部打印显示初始值问题

解决数独求解后外部打印grid仍为初始值的问题

问题原因

你的solve函数采用回溯算法,递归调用完成后执行了grid[row][column] = 0——这是为了尝试当前单元格的其他可能数字。但当找到完整解时,回溯过程会把所有填充的数字逐一重置为0,最终grid回到初始状态。函数内部打印的是找到解瞬间的grid(此时还未开始回溯重置),所以外部打印时已经恢复初始值。

解决方案

修改solve函数,让它返回是否找到解的布尔值。当递归找到完整解时,直接返回True,跳过后续的重置操作,这样就能保留求解后的grid状态。

修改后的完整代码

import random
import numpy as np

# 定义初始数独网格,示例为全0(用于生成新数独),也可以替换为待求解的部分填充网格
grid = [[0 for _ in range(9)] for _ in range(9)]

def possible(row, column, number):
    global grid
    # 检查当前行是否存在重复数字
    for i in range(9):
        if grid[row][i] == number:
            return False
    # 检查当前列是否存在重复数字
    for i in range(9):
        if grid[i][column] == number:
            return False
    # 检查当前3x3宫格是否存在重复数字
    x0 = (column // 3) * 3
    y0 = (row // 3) * 3
    for i in range(3):
        for j in range(3):
            if grid[y0+i][x0+j] == number:
                return False
    return True

def solve():
    global grid
    number_list = [1,2,3,4,5,6,7,8,9]
    random.shuffle(number_list)  # 打乱数字列表,生成不同的解/新数独
    for row in range(9):
        for column in range(9):
            if grid[row][column] == 0:
                for number in number_list:
                    if possible(row, column, number):
                        grid[row][column] = number
                        # 递归求解,若找到完整解则直接返回True,不再重置当前单元格
                        if solve():
                            return True
                        # 未找到解时才重置当前单元格,尝试下一个数字
                        grid[row][column] = 0
                # 当前单元格所有数字都尝试失败,返回False
                return False
    # 找到完整解,打印并返回True
    print("求解完成(内部打印):")
    print(np.matrix(grid))
    return True

# 调用求解函数
solve()

# 外部打印求解后的网格
print("\n求解完成(外部打印):")
print(np.matrix(grid))

关键修改点

  • 为solve函数添加布尔返回值:找到解时返回True,未找到时返回False。
  • 在递归调用后判断返回值,若为True(已找到完整解),则跳过grid[row][column] = 0的重置操作,直接返回True,终止回溯过程。
  • 确保初始grid变量已正确定义(示例中为全0网格,用于生成新数独,可替换为待求解的网格)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:55:45