# 参考题解中大佬们的做法后,编写的
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])))