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

51. N 皇后

时间:2023-03-19 16:33:16浏览次数:46  
标签:int chessboard 51 char 皇后 col row

51. N 皇后

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

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

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

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

示例 1:

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]

提示:

  • 1 <= n <= 9
class Solution {
    List<List<String>> res = new ArrayList<>();

    public List<List<String>> solveNQueens(int n) {
        char[][] chessboard = new char[n][n];
        for (char[] c : chessboard) {
            Arrays.fill(c, '.');
        }
        backTrack(n, 0, chessboard);
        return res;
    }


    public void backTrack(int n, int row, char[][] chessboard) {
        if (row == n) {
            res.add(Array2List(chessboard));
            return;
        }

        for (int col = 0;col < n; ++col) {
            if (isValid (row, col, n, chessboard)) {
                chessboard[row][col] = 'Q';
                backTrack(n, row+1, chessboard);
                chessboard[row][col] = '.';
            }
        }

    }


    public List Array2List(char[][] chessboard) {
        List<String> list = new ArrayList<>();

        for (char[] c : chessboard) {
            list.add(String.copyValueOf(c));
        }
        return list;
    }


    public boolean isValid(int row, int col, int n, char[][] chessboard) {
        // 检查列
        for (int i=0; i<row; ++i) { // 相当于剪枝
            if (chessboard[i][col] == 'Q') {
                return false;
            }
        }

        // 检查45度对角线
        for (int i=row-1, j=col-1; i>=0 && j>=0; i--, j--) {
            if (chessboard[i][j] == 'Q') {
                return false;
            }
        }

        // 检查135度对角线
        for (int i=row-1, j=col+1; i>=0 && j<=n-1; i--, j++) {
            if (chessboard[i][j] == 'Q') {
                return false;
            }
        }
        return true;
    }
}

 回溯典中典(代码来自代码随想录)

标签:int,chessboard,51,char,皇后,col,row
From: https://www.cnblogs.com/fulaien/p/17233494.html

相关文章

  • 51保活
    QkpQYThRb21XYmJCaGN3SjlmUGVRcFhMeHJpVHREcnl5VkdOMllMK1B2Rmo2L1orWkFZWUYrdi9aaGsyR3lhN2IxN3VZNWZIZURzawpvcWRjSUxCeU8yVEJmS3RzaXFrWnFYa1pLR0dlUDNKbWVlWW5kbFkyV2l......
  • 代码随想录18 513.找树左下角的值 | 112. 路径总和 113.路径总和ii | 106.从中序
    513. 找树左下角的值给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例1:输入:root=[2,1,3]输出......
  • P1451 求细胞数量
    求细胞数量题目描述一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。输入格式......
  • HDU 6514 Monitor
    注意:注意要用scanf注意多测#include<iostream>#include<vector>usingnamespacestd;intn,m,q;vector<vector<int>>a;voidinsert(intx1,inty1,intx......
  • ASEMI代理PCF85163T/1,518原装NXP车规级PCF85163T/1,518
    编辑:llASEMI代理PCF85163T/1,518原装NXP车规级PCF85163T/1,518型号:PCF85163T/1,518品牌:NXP/恩智浦封装:SOP-8批号:2023+安装类型:表面贴装型PCF85163T/1,518汽车芯片......
  • MATH1851 Ordinary differential equations
    课程内容笔记,自用,不涉及任何assignment,exam答案Notesforself-use,donotincludeanyassignmentsorexamsMATH1851的第二节:主要学习常微分方程ODE:Ordinary......
  • Codeforces Round 851 (Div. 2) (CF1788) 题解
    CF1788AOneandTwo对于一个序列,题目要求蓝色部分的乘积等于绿色部分的乘积,因为序列中只有\(1\)和\(2\),所以我们只要蓝色部分和绿色部分的\(2\)的数量相等即可,使用......
  • 【漏洞复现】Fantastic Blog CMS SQL注入漏洞(CVE-2022-28512)
    FantasticBlogCMSSQL注入漏洞(CVE-2022-28512)0x01靶场介绍FantasticBlog(CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客......
  • ERROR 10516 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
    在IDEA上运行程序时遇到如下问题:如果你跟我一样也遇到了这个问题,那么大概率是端口冲突造成的。可能是之前运行的程序没有完全关闭从而影响到了现在的程序运行,最根本的解......
  • 算法随想Day50【动态规划】| LC647-回文子串、LC516-最长回文子序列
    LC647.回文子串动态规划法:遍历顺序:从下往上,从左往右当s[i]与s[j]相等时,需要考虑三种情况:情况一:下标i与j相同,同一个字符例如a,当然是回文子串情况二:下标i与j相差......