Проблема в том, что вы постоянно добавляете один и тот же экземпляр columns
в список результатов.Вот упрощенный пример того, что происходит
>>> results = []
>>> columns = ["original column value"]
>>> results.append(columns)
>>> results.append(columns)
>>> results
[['original column value'], ['original column value']]
>>> columns[0] = "A new value"
>>> results
[['A new value'], ['A new value']]
>>>
Чтобы обойти это, вам нужно сделать копию списка столбцов, чтобы не изменять столбцы, уже добавленные к результатам
Простой способ скопировать список - нарезать его с помощью columns = columns[:]
. Копирование списка columns
в функции placeQueen
должно решить проблему
def placeQueen(row, columns):
# creates a copy of the columns list
columns = columns[:]
if (row == GRID_SIZE):
print(columns) # it is where I print the positions
return [columns] # it is where I append the positions
results = []
for col in range(GRID_SIZE):
if (checkVlaid(row, col, columns)):
columns[row] = col
results += placeQueen(row + 1, columns)
return results