Leetcode 51:51. N 皇后 - 力扣(LeetCode) (leetcode-cn.com)
52. N皇后 II - 力扣(LeetCode) (leetcode-cn.com)
DFS剪枝问题
不能放棋子的条件:
1.queen所在行【遍历项】
2.queen所在列
3.queen的左对角线,坐标x+y=C(常数)
4.queen的右对角线,坐标y-x=C(常数)
代码如下:
class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
result=[]
def DFS(queens,x_ys,x_plus_ys):
p=len(queens)
if p==n:
result.append(queens)
return
for q in range(n):
if q not in queens and p-q not in x_ys and p+q not in x_plus_ys:
DFS(queens+[q],x_ys+[p-q],x_plus_ys+[p+q])
DFS([],[],[])
return [["."*i+"Q"+"."*(n-i-1) for i in sol] for sol in result]