def check(point, i, sudoku): x, y = point[0], point[1] # 同行/同列 #print(x, y) for z in range(9): ##print(z!=x,sudoku[x][z] == i) #print(x,y,z) if z != x and sudoku[x][z] == i: #print('行') return False if z != y and sudoku[z][y] == i: #print('行') return False
# 同九宫格
m, n = 3 * (x // 3), 3 * (y // 3)
for a in range(m, m + 3):
for b in range(n, n + 3):
if sudoku[a][b] == i:
#print('jiu')
return False
return True
def dfs(point, sudoku): x, y = point[0], point[1] global res,flag #print(x,y) # 结束条件 if flag == 1: return
if x == 8 and y == 9:
#print('1')
res = sudoku[:]
for i in res:
print(*i)
flag = 1
# print(res)
if y == 9:
#print('y=9')
y = 0
x += 1
#print('改之后',x,y)
if (sudoku[x][y] == 0):
#print('为0,填数字', x, y, sudoku[x][y])
# 填数字
#print('改',x,y)
for i in range(1, 10):
# 可以填
# print('check:',i,check(point, i, sudoku))
if (check([x,y], i, sudoku)):
sudoku[x][y] = i
dfs([x, y + 1], sudoku)
sudoku[x][y] = 0
# 不可以,结束
else:
continue
# 这个格子填不了任何数字
else:
dfs([x, y + 1], sudoku)
while True: try: result=[] res = [] flag = 0 for i in range(9): result.append(list(map(int,input().split()))) dfs([0,0],result) except: break