Я пытаюсь использовать рекурсию для решения головоломки suduko в виде массива numpy: Примерно так:
[[5 3 0 0 7 0 0 0 0]
[6 0 0 1 9 5 0 0 0]
[0 9 8 0 0 0 0 6 0]
[8 0 0 0 6 0 0 0 3]
[4 0 0 8 0 3 0 0 1]
[7 0 0 0 2 0 0 0 6]
[0 6 0 0 0 0 2 8 0]
[0 0 0 4 1 9 0 0 5]
[0 0 0 0 8 0 0 7 9]]
Я сделал функцию проверки примерно так:
def possible(y, x, n):
ylim = (y//3)*3
xlim = (x//3)*3
ln = board[ylim:ylim+3, xlim:xlim+3].flatten().tolist()
for i in ln:
if i==n:
return False
vert = board[y].tolist()
for i in vert:
if i==n:
return False
horz = board[x].tolist()
for i in horz:
if i==n:
return False
return True
И, наконец, функция «Решить»:
def solve(board):
for index, value in np.ndenumerate(board):
y, x = index
if value == 0:
for n in range(1, 10):
if (possible(y, x, n)):
board[y][x]=n
solve(board)
board[y][x] = 0
return
print(board)
Однако, похоже, это ничего не возвращает, и программа выводит пустую строку.