【leetcode刷题】51&52 n-queens

本文详细介绍了如何使用深度优先搜索(DFS)算法解决N皇后问题,通过递归调用和状态验证确保每一步操作的正确性,最终输出所有可能的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值