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])))
八皇后问题的变体。