# 参考题解中大佬们的做法后,编写的 shudu=[[0]*9 for _ in range(9)] # 接收数据 for i in range(9): shudu[i]=list(map(int,input().split())) #判断当前填写的数,是否满足要求 def check(shudu,x,y): #检查第x行新填写的数,在本行是否有重复的情况。 if shudu[x].count(shudu[x][y])>1: return False # 检查第y列填写的数,在本列是否有重复的情况。 for i in range(9): if shudu[x][y]==shudu[i][y] and x !=i: return False # 检查没个3*3的方格中是否有重复的情况。 mi=3*(x//3) #mi,ni表示每个方格开始的位置 ni=3*(y//3) for i in range(mi,mi+3): for j in range(ni,ni+3): if shudu[x][y]==shudu[i][j] and x!=i and y!=j: return False return True #如果都没问题,返回Ture #开始尝试找到0的位置,然后开始填写一个数,然后再继续递归的填写 def fillshudu(shudu): for i in range(9): for j in range(9): if shudu[i][j]==0: # 查找等与0 的情况。 for k in range(1,10): shudu[i][j]=k if check(shudu,i,j) and fillshudu(shudu): #检查并且递归调用继续填写 return True else: shudu[i][j]=0 return False # 这个位置的返回很重要,如果1-9都填写了一次,都不满足要求,就需要返回False return True #全部遍历了,都没等与0的情况了,也返回True # 开始调用函数 fillshudu(shudu) #打印输出 for i in range(9): print(' '.join(map(str,shudu[i])))