ffffds

def quzhi(list_99,i,j):
    list_h = list_99[i]
    list_s = [list_99[s][j] for s in range(9)]
    h3 = int(j/3)
    s3 = int(i/3)
    list_33 = list_99[3*s3][3*h3:3*h3+3] + list_99[3*s3+1][3*h3:3*h3+3] + list_99[3*s3+2][3*h3:3*h3+3]
    set_value = set(list_33+list_s+list_h)
    list_quzhi = []
    for value in range(1,10):
        if value not in set_value:
            list_quzhi.append(value)
    return list_quzhi
def js99(list_99):
    dict_quzhi = {}
    for i in range(9):  # 第i横行
        for j in range(9):  # 第j数列
            if list_99[i][j] == 0:
                list_quzhi = quzhi(list_99, i, j)
                if len(list_quzhi) == 0:  # 没有可能的取值,返回错误
                    return False
                if len(list_quzhi) == 1: # 只有一个可能取值,必定取这个,赋值后重新返回
                    list_99[i][j] = list_quzhi[0]
                    return js99(list_99)
                else:   # 有多种可能先保存到字典
                    dict_quzhi[(i, j)] = list_quzhi
    else:
        if dict_quzhi:  # 还有取值的情况随机找可能取值最少的一个点依次赋值返回
            min_num = min(dict_quzhi.values())
            for key in dict_quzhi.keys():
                if dict_quzhi[key] == min_num:
                    for value in dict_quzhi[key]:
                        list_99[key[0]][key[1]] = value
                        if js99(list_99):
                            return list_99
        else:
            return list_99
try:
    list_99 = []
    for n in range(9):
        str1 = input()
        list_99.append([int(m) for m in str1.split()])
    list_99 = js99(list_99)
    for i in list_99:
        for j in range(9):
            if j == 8:
                print(i[j])
            else:
                print(i[j],end=" ")
except:
    pass

def quzhi(list_99,i,j):
    list_h = list_99[i]
    list_s = [list_99[s][j] for s in range(9)]
    h3 = int(j/3)
    s3 = int(i/3)
    list_33 = list_99[3*s3][3*h3:3*h3+3] + list_99[3*s3+1][3*h3:3*h3+3] + list_99[3*s3+2][3*h3:3*h3+3]
    set_value = set(list_33+list_s+list_h)
    list_quzhi = []
    for value in range(1,10):
        if value not in set_value:
            list_quzhi.append(value)
    return list_quzhi
def js99(list_99):
    dict_quzhi = {}
    for i in range(9):  # 第i横行
        for j in range(9):  # 第j数列
            if list_99[i][j] == 0:
                list_quzhi = quzhi(list_99, i, j)
                if len(list_quzhi) == 0:  # 没有可能的取值,返回错误
                    return False
                if len(list_quzhi) == 1: # 只有一个可能取值,必定取这个,赋值后重新返回
                    list_99[i][j] = list_quzhi[0]
                    return js99(list_99)
                else:   # 有多种可能先保存到字典
                    dict_quzhi[(i, j)] = list_quzhi
    else:
        if dict_quzhi:  # 还有取值的情况随机找可能取值最少的一个点依次赋值返回
            min_num = min(dict_quzhi.values())
            for key in dict_quzhi.keys():
                if dict_quzhi[key] == min_num:
                    for value in dict_quzhi[key]:
                        list_99[key[0]][key[1]] = value
                        if js99(list_99):
                            return list_99
        else:
            return list_99
try:
    list_99 = []
    for n in range(9):
        str1 = input()
        list_99.append([int(m) for m in str1.split()])
    list_99 = js99(list_99)
    for i in list_99:
        for j in range(9):
            if j == 8:
                print(i[j])
            else:
                print(i[j],end=" ")
except:
    pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值