皇后拼图广度优先

时间:2013-12-06 10:05:15

标签: python artificial-intelligence n-queens

我被告知制作一个使用eight queens puzzle来解决breadth first search的程序。这是我到目前为止所得到的:

def n_queens(n, width):
if n == 0:
    return [[]
else:
    return add_queen(n-1, width, n_queens(n-1, width))


def add_queen(new_row, width, previous_solutions):
solutions = []
for sol in previous_solutions:
    for new_col in range(width):
        if safe_queen(new_row, new_col, sol):
            solutions.append(sol + [new_col])
return solutions


def safe_queen(new_row, new_col, sol):
for row in range(new_row):
    if (sol[row] == new_col or                  
        sol[row] + row == new_col + new_row or
        sol[row] - row == new_col - new_row):
            return 0
return 1

for sol in n_queens(8, 8):
print sol

有没有办法改善这个?

2 个答案:

答案 0 :(得分:0)

我认为BFS不是我解释这个问题的方式。相反,专注于递归生成可能的展示位置。对于每个放置的女王,下一行中只有一定数量的可能放置,不能被攻击。 “放置”一个女王并递归每个位置,并在你放置总王后数时终止。希望你会认识到一个for循环混合了一些递归调用似乎是一个不错的主意。还记得在你的递归返回时“拿起”放置的皇后。

答案 1 :(得分:0)

同意之前的条目。上述算法是“深度优先”搜索而不是“广度优先”搜索,并且对于此类问题更有效。