Наиболее ограничивающая переменная и наименее ограничивающее значение для N-Queens - Python - PullRequest
0 голосов
/ 08 октября 2018

Я пытался решить проблему N-Queens (только 1 решение), и мне это удалось, но моя программа могла рассчитать только до N = 47 в течение достаточно длительного времени, поэтому я попытался реализовать наименьшее ограничивающее значение и наиболее ограничивающую переменнуюи хотя он стал быстрее, он все еще был медленным.Что я могу сделать, чтобы иметь возможность вычислить до N = 1000?

def solve(n, x, board, mid_rows, sd_squares):
    # If we are on the last row, it means we have put all the queens:
    if x >= n:
        print_board(board)
        sys.exit(0)


    for i in sd_squares:
        # If we can put a queen on the current square, do it
        if isOk(board, mid_rows[x], i, n):
            board[mid_rows[x]][i] = 1

            # Do the same thing for the next row
            solve(n, x + 1, board, mid_rows, sd_squares)

        # If we are here, it means we put the queen in the wrong square so we have to remove that queen
        board[mid_rows[x]][i] = 0

Я не могу опубликовать весь код, потому что он слишком длинный, но учтите, что isOk(board, x, y, n) - это функция, которая сообщает, если мыставьте ферзь в строку x и столбец y, это угрожает другим королевам или нет.

mid_rows - это массив, который включает в себя наибольшее количество средних строк в боковых строках, так что, скажем, n = 5, тогда это [2,3,1,4,0]или когда n = 6, это [3,2,4,1,5,0].

sd_squares - это список, который содержит боковые и средние квадраты.Например, когда n = 5, это [0,4,1,3,2] или когда n = 6, это [0,5,1,4,2,3].

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