import sys
n = 9
sudoku = []
row_record = [[0]*n for _ in range(n)]
col_record = [[0]*n for _ in range(n)]
grid_record = [[[0]*n for _ in range(3)] for j in range(3)]
for line in sys.stdin:
sudoku.append(list(map(int, line.split())))
blanklist = []
setlist = []
for i in range(n):
for j in range(n):
v = sudoku[i][j]
if v != 0:
row_record[i][v-1] = 1
col_record[j][v-1] = 1
grid_record[i//3][j//3][v-1] = 1
else:
blanklist.append((i, j))
def dfs():
if len(blanklist)==0:
return True
i, j = blanklist.pop()
setlist.append((i, j))
for v in range(1, 10):
if row_record[i][v-1] == 0 and col_record[j][v-1] == 0 and grid_record[i//3][j//3][v-1] == 0:
sudoku[i][j] = v
row_record[i][v-1] = 1
col_record[j][v-1] = 1
grid_record[i//3][j//3][v-1] = 1
if dfs():
return True
row_record[i][v-1] = 0
col_record[j][v-1] = 0
grid_record[i//3][j//3][v-1] = 0
sudoku[i][j] = 0
blanklist.append(setlist.pop())
return False
dfs()
for i in range(n):
print(' '.join(map(str, sudoku[i])))
八皇后问题的变体。

京公网安备 11010502036488号