# -*- coding: utf-8 -*-
def puzzle(rows, cols):
if rows == 0:
return [[]]
else:
return new_queen(rows - 1, cols, puzzle(rows - 1, cols))
def new_queen(new_row, cols, plsd_queens):
new_solutions = []
for solution in plsd_queens:
for new_col in range(cols):
if test(new_row, new_col, solution):
new_solutions.append(solution + [new_col])
return new_solutions
def test(new_row, new_col, solution):
for row in range(new_row):
if solution[row] == new_col or solution[row] + row == new_col + new_row or\
solution[row] - row == new_col - new_row:
return False
return True
大家好!如何找到这种N-queens拼图递归算法的独特解决方案? 它只找到所有解决方案:板载8x8,它将是92个解决方案,但唯一的只有12个(其他解决方案是翻译,并从这12个镜像)
答案 0 :(得分:0)
为获得最佳效果,您应该通过dynomic-programing设计算法,并在以下位置找到它: google Stackoverflow
你设置一个数组a [n] [count]并将状态i保存在[..] [i]中。 这是第一项n = 8的样本:
a = {5,1,8,4,2,7,3,6} {1},.....
注意:每个解决方案都可以通过对称和旋转更改为8状态。对于每个结果,您对称和旋转他们的解决方案是检查是否保存在您的数组中?