【数据结构和算法】_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))
上一篇:2020最新滚雪球幸运揭秘《飞艇78码滚雪球技巧规律与公式》个人多年经验


下一篇:NumPy数组属性