首页 > 其他分享 >51. N 皇后

51. N 皇后

时间:2024-12-01 23:10:37浏览次数:7  
标签:dg 51 dfs udg 放置 皇后 col

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

 

col, dg 和 udg,分别表示列、正对角线和反对角线上的是否有皇后

数组 g 记录当前棋盘的状态。

dfs(i),表示从第 i 行开始放置皇后。

否则,我们枚举当前行的每一列 j,如果位置 (i,j) 没有皇后,即 col[j], dg[i+j] 和 udg[n−i+j] 都为 0,那么我们可以放置皇后,即把 g[i][j] 改为 'Q',并将 col[j], dg[i+j] 和 udg[n−i+j] 都置为 1,然后继续搜索下一行,即调用 dfs(i+1),递归结束后,我们需要将 g[i][j] 改回 '.' 并将 col[j], dg[i+j] 和 udg[n−i+j] 都置为 0。

 

class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        def dfs(i: int):
            if i == n:
                ans.append(["".join(row) for row in g])
                return
            for j in range(n):
                if col[j] + dg[i + j] + udg[n - i + j] == 0:
                    g[i][j] = "Q"
                    col[j] = dg[i + j] = udg[n - i + j] = 1
                    dfs(i + 1)
                    col[j] = dg[i + j] = udg[n - i + j] = 0
                    g[i][j] = "."

        ans = []
        g = [["."] * n for _ in range(n)]
        col = [0] * n
        dg = [0] * (n << 1)
        udg = [0] * (n << 1)
        dfs(0)
        return ans

 

标签:dg,51,dfs,udg,放置,皇后,col
From: https://www.cnblogs.com/xxlm/p/18580592

相关文章

  • 51单片机从入门到精通:理论与实践指南综合应用——实战篇(七)
    学完了入门篇和常用资源篇,接下来就进入了综合篇——实战篇了。大概是三个案例,写三篇博客给大家讲解,希望可以帮助大家。在生活的道路上,每一个人都会遇到挑战与困难,这些时刻或许会让前路显得模糊不清,甚至让人感到无助和迷茫。但请记住,正是这些艰难的时光塑造了更加坚强、更有智......
  • 【LeetCode:51. N 皇后 + DFS】
    ......
  • 【050】基于51单片机计步器【Keil程序+报告+原理图】
    ☆、设计硬件组成:51单片机最小系统+ADXL345三轴加速度传感器+LCD1602液晶显示+AT24C02存储芯片+按键控制。1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片,LCD1602实时显示;2、设计采用ADXL345三轴加速度传感器实现对行走步数的计数;3、系统能够计算出行走......
  • LCR 151.彩灯装饰记录III
    题目代码classSolution{publicList<List>levelOrder(TreeNoderoot){if(root==null){returnnewArrayList<>();}Queue<TreeNode>queue=newLinkedList<>();List<List<Integer>>res=newArrayList<>();......
  • 【51单片机】程序实验7&8.IO扩展-LED点阵
    主要参考学习资料:B站【普中官方】51单片机手把手教学视频前置知识:C语言单片机套装:普中STC51单片机开发板A4标准版套餐7码字不易,求点赞收藏加关注(´•ω•̥`)有问题欢迎评论区讨论~目录IO扩展-74HC59574HC595芯片介绍硬件介绍实验7-1IO扩展实验7-2IO扩展(595级......
  • 【每日一题】3251. 单调数组对的数目 II
      给你一个长度为 n 的 正 整数数组 nums 。如果两个 非负 整数数组 (arr1,arr2) 满足以下条件,我们称它们是 单调 数组对:两个数组的长度都是 n 。arr1 是单调 非递减 的,换句话说 arr1[0]<=arr1[1]<=...<=arr1[n-1] 。arr2 是单调 非递增 ......
  • POJ1251-Jungle Roads
    开始刷邝斌飞最小生成树专题POJ1251HDU1301可用平台就刷AC人数300+的那四个题     ###:好饿,好冷,好累,腿好软,感觉有点虚脱了。已经不知道是第几次饿的走不回去了肚子里面感觉有点恶心。去,好饿啊。好想去8点半吃个泡面,吃个干拌面,但是那玩意儿根本就吃不饱。死贵死......
  • 力扣刷题——3251. 单调数组对的数目 II
    考虑arr1可以取到的数字组合数,从0到i+1位置的合法的arr1组合数,可以从0到i的组合数得到。因此可以想到用动态规划解决问题,使用一个数组dp[i][j]代表arr1[i]=j时,前i+1个数字有多少个组合。这样一来,最终的答案即为sum(dp[n-1][0...M],其中M为nums中最大值。根据这个思路写出一个简......
  • MS3251 Analytics Using SAS
    MS3251AnalyticsUsingSASAssignment2Youmustcompletetheassignmentbyyourself.Exchangingideaswithclassmatesisencouraged,butyoumustnotcrossthelinebetweendiscussionandcollaboration.Showingyourworktoyourclassmatesisanon-acc......
  • 蓝桥3511飞机降落
    样例输入230100101010100220301020101020201020样例输出YESNO思路:具体来说,对于每架飞机,有起飞时间(t)、降落时间限制(d)和飞行时长(l)等信息,代码要判断能否按照一定规则安排这些飞机的起降顺序,使得所有飞机都能在其降落时间限制内完成降落。代码展示:#incl......