回溯 N-Queens

文章介绍了N-Queens问题,即在n×n的棋盘上放置n个皇后,使得没有两个皇后互相攻击。给出了一种使用深度优先搜索(DFS)的解决方案,通过维护cols、right_down和left_down集合来避免冲突。代码实现了一个Solution类,包含dfs方法来递归放置皇后,并计算不同的解决方案数量。示例展示了对于n=4的情况,有2种不同的解决方案。

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

1. [52]N-Queens II

# The n-queens puzzle is the problem of placing n queens on an n x n chessboard 
# such that no two queens attack each other. 
# 
#  Given an integer n, return the number of distinct solutions to the n-queens 
# puzzle. 
# 
#  
#  Example 1: 
# 
#  
# Input: n = 4
# Output: 2
# Explanation: There are two distinct solutions to the 4-queens puzzle as shown.
# 
#  
# 
#  Example 2: 
# 
#  
# Input: n = 1
# Output: 1
#  
# 
#  
#  Constraints: 
# 
#  
#  1 <= n <= 9 
#  
#  Related Topics 回溯 👍 441 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
class Solution:
    def __init__(self):
        self.res = 0
        self.cols = set()
        self.right_down = set()
        self.left_down = set()

    def dfs(self, cur, n):
        if cur >= n:
            self.res += 1
        for i in range(n):
            if i + cur not in self.left_down and i - cur not in self.right_down and i not in self.cols:
                self.left_down.add(i + cur)
                self.right_down.add(i - cur)
                self.cols.add(i)
                self.dfs(cur + 1, n)
                self.left_down.remove(i + cur)
                self.right_down.remove(i - cur)
                self.cols.remove(i)

    def totalNQueens(self, n: int) -> int:
        self.dfs(0, n)
        return self.res

# leetcode submit region end(Prohibit modification and deletion)

if __name__ == '__main__':
    so = Solution()
    res = so.totalNQueens(4)
    print(res)

1.1 解题思路

  • left-down 横纵坐标的求和为定值。
  • right-down 横纵坐标相减为定值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无声之钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值