Решение N Queens ничего не возвращает - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь решить проблему N Queens. Учитывая матрицу n на n, я должен вычислить все возможные решения, где могла бы присутствовать королева. На доске всегда будет N ферзей, но позиции каждой из них различны.

Мой алгоритм состоит из функции check, которая выполняет полный поиск по доске, следя за тем, чтобы никакие две королевы не атаковали друг друга. Мой алгоритм тогда имеет функцию solve, которая принимает board,col,n в качестве своих параметров. Col представляет столбец доски, а n - длину.

Вот мой код:

def check(board,n): #does complete check of board 
    for col in range(n): #checks for horiz and vertical queens 
        rowQueens = 0
        colQueens = 0
        for row in range(n):
            if board[col][row] == 1:
                rowQueens += 1
            if board[row][col]:
                colQueens += 1
            if rowQueens >= 2 or colQueens >= 2:
                return False
    queens = 0
    for i in range(n): #checks for primary diagonal
        if board[i][i]:
            queens += 1
        if queens >= 2:
            return False
    queens = 0
    for i in range(n): #checks for secondary diagonal
        if board[n-1-i][i]:
            queens += 1
        if queens >= 2:
            return False
    for i in reversed(range(1,n)): #checks diagonals from bottom 
        for j in range(n-1):
            if board[i-1][j+1] == board[i][j] == 1:
                return False
    for i in range(n-1): #checks diagonals from top
        for j in range(n-1):
            if board[i][j] == board[i+1][j+1] == 1:
                return False
    return True
solutions = [] 
def solve(board,col,n):
    if col == n:
        solutions.append(board)
        return 
    for i in range(n):
        board[i][col] = 1
        if check(board,n) == True:
            solve(board,col+1,n)
        else:
            board[i][col] = 0
    return False

n = 3
board = [[0] * n] * n
solve(board,0,n)
print(solutions)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...