Рекурсивный возврат к Решению судуко - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь использовать рекурсию для решения головоломки 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)

Однако, похоже, это ничего не возвращает, и программа выводит пустую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...