지난 번 스도쿠 문제와 동일. 유효 숫자를 정렬해서 주었기 때문에 먼저 출력되는 스도쿠는 가장 빠른 순서의 스도쿠다.
import sys
nodes = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(9)]
zeros = []
for i in range(9):
for j in range(9):
if nodes[i][j] == 0: zeros.append((i, j))
zero_cnt = len(zeros)
def number_check(row, col):
numbers = set()
for i in range(9):
numbers.add(nodes[i][col])
numbers.add(nodes[row][i])
box_row, box_col = row // 3, col // 3
for i in range(box_row * 3, box_row * 3 + 3):
for j in range(box_col * 3, box_col * 3 + 3):
numbers.add(nodes[i][j])
numbers = set(range(1, 10)).difference(numbers)
numbers = list(numbers)
numbers.sort()
return numbers
def DFS(cnt):
if cnt == zero_cnt:
for row in nodes:
print(*row, sep='')
exit(0)
row, col = zeros[cnt]
numbers = number_check(row, col)
for num in numbers:
nodes[row][col] = num
DFS(cnt + 1)
nodes[row][col] = 0
DFS(0)