【leetcode刷题】51&52 n-queens

原题链接:
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

猜你喜欢

转载自blog.csdn.net/weixin_39746008/article/details/89425101
今日推荐