Задача про вісім ферзів: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Рядок 42:
 
Для дошки 8×8 програма переглядає 15720 позицій.
<source lang="python">
def damenproblem(rows, cols):
if rows <= 0:
return [[]] # порожня дошка є розв'язком для випадку без ферзів
else:
return add_queen(rows - 1, cols, damenproblem(rows - 1, cols))
def add_queen(new_row, cols, known_solutions):
new_solutions = []
for solution in known_solutions:
for new_column in range(cols):
# print('Спроба: %s в рядку %s' % (new_column, new_row))
if no_conflict(new_row, new_column, solution):
# відсутні конфлікти, цей варіант є розв'язком
new_solutions.append(solution + [new_column])
return new_solutions
# Перевіряє, чи можна поставити ферзя в комірку "new_column"/"new_row" так,
# аби не ставити під удар вже розміщенні ферзі
def no_conflict(new_row, new_column, solution):
# Переконатись, що новий ферзь не знаходиться на одній колонці або діагоналі
for row in range(new_row):
if solution[row] == new_column or # Співпадають колонки
solution[row] + row == new_column + new_row or # Співпадає діагональ
solution[row] - row == new_column - new_row: # Співпадає діагональ
return False
return True
</source>
 
== Посилання ==