1
# -*- 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 皇后谜题递归算法的唯一解?它只找到所有解决方案:在 8x8 上它将是 92 个解决方案,但唯一的是只有 12 个(其他解决方案是翻译并从这 12 个镜像)

4

1 回答 1

0

我认为这些很有用: link1 link2

为了获得最佳结果,您应该通过动态编程来设计您的算法,并且可以在以下位置找到它: google Stackoverflow

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

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

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

于 2013-03-03T15:01:13.143 回答