# 输出函数 def output(): for i in range(9): for j in sudu[i]: print(j, end=" ") print() # 检查函数 def check(r, c): # 参数为当前行列数 # 检查行内重复,注意检查的时候不要检查自己所处的位置 for i in range(9): if i == c: # 跳过自己这个位置,不然肯定重复呀 continue else: if sudu[r][c] == sudu[r][i]: # 有重复的 return False # 检查列内重复 for i in range(9): if i == r: # 跳过自己 continue else: if sudu[r][c] == sudu[i][c]: return False # 检查九宫格 shang = r // 3 * 3 # 本点所处九宫格最上边的行数 zuo = c // 3 * 3 # 本点所处九宫格最左边的列数 for i in range(shang, shang + 3): # 遍历行 for j in range(zuo, zuo + 3): # 遍历列 if i == r and j == c: # 跳过自己 continue else: if sudu[r][c] == sudu[i][j]: return False return True # 都不重复 # 深搜函数,填写sudu def dfs(): # 参数为当前行列数 for i in range(9): for j in range(9): if sudu[i][j]==0: for k in range(1,10): sudu[i][j]=k if check(i,j) and dfs(): return True#如果深层有正确结果则不需要继续搜索,返回即可 sudu[i][j]=0 return False#都不行,回溯 return True#遍历完成即填写成功,返回真 # 输入 sudu = [] for i in range(9): sudu.append(list(map(int, input().split()))) # 填空 dfs() output()