原题链接:
https://leetcode.com/problems/n-queens/
解题思路:
利用dfs搜索,相当于建立一个深度为n的dfs,每一个结点从0开始增加到(n-1),取每一个值时进行验证,看是否符合规范,如果符合则继续调用dfs进入下一级节点,否则该节点数值继续增加。如果当前路径是死路则回退;如果当前路径能走通,则输出一组value的值。
代码:
class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
queen = [-1] * n
self.ans = []
self.DFS(n, 0, queen, [])
return self.ans
def DFS(self, n, depth, queen, vals):
s = '.'*n
if depth==n:
self.ans.append(vals)
return
for pos in range(n):
if self.isValid(depth, pos, queen):
tmp = queen[:]
tmp[depth] = pos
self.DFS(n, depth+1, tmp, vals+[s[:pos]+'Q'+s[(pos+1):]])
def isValid(self, depth, pos, queen):
for i in range(depth):
if pos==queen[i] or abs(pos-queen[i])==abs(depth-i):
return False
return True
52题类似
参考链接:
https://www.cnblogs.com/asrman/p/3984279.html