class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
if n<1:
return []
self.result = []
#递归开始的位置
self.DFS(n,0,[])
#返回的格式可以自己定义
return [['.'*i + 'Q' + '.'*(n-i-1) for i in sol] for sol in self.result]
def DFS(self,n,row,record):
#递归的终止条件
if row>=n:
self.result.append(record)
return
#否则,我们就按列去循环
for j in range(n):
if self.Is_ok(record,j)==True:
#开始递归
self.DFS(n,row+1,record+[j])
def Is_ok(self,record,new_state):
'''其实我们想用剪枝方法.用数组或是集合保存已经放置的皇后的位置,然后用新的皇后的位置与之比较即可。我们将都是实现数组或是集合的方式,这里先用数组'''
#参数 record:存贮列的位置,下标表示行数
lens = len(record)
for index in range(lens):
#判断是否同列、以及对交元素
if record[index]==new_state or lens-index==abs(new_state-record[index]):
return False
return True
这个问题我想了很久,才差不多搞懂。如果大家有什么疑问欢迎随时留言。