题解 | Sudoku
Sudoku
https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
def check(x, y, v, board):
for k, i in enumerate(board[x]):
if i == v and k != y:
return False
for k, i in enumerate(board):
if i[y] == v and k != x:
return False
m = (x // 3)*3
n = (y // 3)*3
for i in range(m, m+3):
for j in range(n, n+3):
if (i != x or j != y) and board[i][j] == v:
return False
return True
def process(board):
for i in range(9):
for j in range(9):
if board[i][j] == 0:
for k in range(1, 10):
board[i][j] = k
if check(i, j, k, board) and process(board):
return True
board[i][j] = 0
return False
return True
while True:
try:
board = []
for i in range(9):
board.append([int(i) for i in input().split()])
process(board)
for i in board:
print(" ".join([str(j) for j in i]))
except:
break

查看12道真题和解析