找到N-queens拼图递归算法的独特解决方案

时间:2013-03-03 13:24:57

标签: python algorithm n-queens

# -*- 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个镜像)

1 个答案:

答案 0 :(得分:0)

我认为这些是有用的: link1 link2

为获得最佳效果,您应该通过dynomic-programing设计算法,并在以下位置找到它: google Stackoverflow

你设置一个数组a [n] [count]并将状态i保存在[..] [i]中。 这是第一项n = 8的样本:

a = {5,1,8,4,2,7,3,6} {1},.....

注意:每个解决方案都可以通过对称和旋转更改为8状态。对于每个结果,您对称和旋转他们的解决方案是检查是否保存在您的数组中?