【数据结构和算法】_10_剪枝

【一】 Interview(面试题)

【1.1】 LeetCode 51 52:N Queens(N皇后问题)

题目说明:西洋象棋,如何将 n 个皇后放置在 n x n 的棋盘上,并且使得皇后之间不能相互攻击

  • DFS(深度优先搜索)
result = []

# 深度优先遍历
def DFS(cols, na, pie, n):
    '''
    :param cols: 列表,存储皇后所在的列的索引
    :param na: 列表,存储皇后辐射的反斜区域
    :param pie: 列表,存储皇后辐射的正斜区域
    :param n: 数字,表示有几个皇后
    '''
    p = len(cols)
    if p == n:
        result.append(cols)
        return None
    for q in range(n):
        if q not in cols and p-q not in na and p+q not in pie:
            DFS(cols+[q], na+[p-q], pie+[p+q], n)

# 调用函数并返回结果
def solveNQueen(n):
    DFS([], [], [], n)
    return [ ['.'*i + 'Q' + '.'*(n-i-1) for i in sol] for sol in result ]

print(solveNQueen(4))
发布了54 篇原创文章 · 获赞 5 · 访问量 2627

猜你喜欢

转载自blog.csdn.net/qq_34330456/article/details/104681704
今日推荐