Я знаю, что N_Queens - очень хорошо освещенная тема, но мне нужно найти хорошее решение на python, которое использует одномерный массив (и, что важно, решает путем заполнения 1d-массива, а затем через функцию преобразует его в 2d-массив).
Я дошел до завершения (что я считаю слишком сложной) функции печати и проверки, но мне кажется, что я не могу выполнить функцию решения.
global queens
queens = []
def printQ():
for i in queens:
for row in range(8):
if row == i:
print(" Q",end="")
else:
print(" .",end="")
print(" ")
def solve(x):
step = len(queens)
for indices in range(step):
if (x == queens[indices]):
return False
for i in range(step,0,-1):
if (x == queens[0-i]-i) or (x == queens[0-i]+i):
return False
else:
return True
def complete():
for i in range(8):
if solve(i) == True:
queens += [i]
elif solve(i) == False:
queens = queens - [i]
else:
return
Я пытаюсь перебрать список и поместить элементы в глобальные [queens], если это возможно. Каждый раз, когда я пытаюсь изменить complete (), я получаю пустой список или ошибку. Я пытаюсь решить эту проблему с помощью обратного отслеживания, но я не уверен, как именно мой псевдо-код должен выглядеть для complete ()
Буду очень признателен за любые советы, и извиняюсь, если мой код не качественный, очень начинающий.
примечание: чтобы доказать, что обе функции работают, просто добавьте элементы в массив [1,4,2], например.