题解 | #Sudoku#

Sudoku

https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

#递归真好用啊
import copy
def dif(l):
    ls=[]
    for i in range(1,10):
        if i not in l:
            ls.append(i)
    return ls
dpwc=[]
def fun1(dp1):
    global dpwc
    for i in range(9):
        for j in range(9):
            if dp1[i][j]==0:
                ls1=dif(dp1[i])
                ls2=dif([dp1[k][j] for k in range(9)])
                r,c=(i//3)*3,(j//3)*3
                tmp=[]
                for ii in range(r,r+3):
                    for jj in range(c,c+3):
                        tmp.append(dp1[ii][jj])
                ls3=dif(tmp)
                canl=[]
                for x in ls1:
                    if x in ls2 and x in ls3:
                        canl.append(x)
                for x in canl:
                    dp2=copy.deepcopy(dp1)
                    dp2[i][j]=x
                    fun1(dp2)
                return
    dpwc=dp1

dp=[list(map(int,input().split())) for _ in range(9)]
fun1(dp)
for i in range(9):
    print(" ".join(map(str,dpwc[i])))

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务