• LeetCode 51. N 皇后


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

     

    class Solution {
    public:
        //检查是否符合规则
        int check(int i,int j,int n,vector<string> & a)
        {
            int x,y;
            for(x=i-1;x>=0;x--)if(a[x][j]=='Q')return 0;
            for(y=j-1;y>=0;y--)if(a[i][y]=='Q')return 0;
            for(x=i-1,y=j-1;x>=0&&y>=0;x--,y--)if(a[x][y]=='Q')return 0;
            for(x=i-1,y=j+1;x>=0&&y<n;x--,y++)if(a[x][y]=='Q')return 0;
            return 1;
        }
        //按行放 每行放一个
        void dfs(int row,int n,vector<string> &a,vector<vector<string>>& res)
        {
            if(row==n)
            {
                res.push_back(a);
                return;
            }
            int col;
            for(col=0;col<n;col++)
            {
                if(check(row,col,n,a))
                {
                    a[row][col]='Q';
                    dfs(row+1,n,a,res);
                    a[row][col]='.';
                }
            }
        }
        vector<vector<string>> solveNQueens(int n) {
            vector<vector<string>> res;
            vector<string> a;
            string _dot;
            for(int i=0;i<n;i++)_dot.push_back('.');
            for(int i=0;i<n;i++)a.push_back(_dot);
            dfs(0,n,a,res);
            return res;
        }
    };

    上图为 8 皇后问题的一种解法。

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

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

    示例:

    输入:4
    输出:[
    [".Q..", // 解法 1
    "...Q",
    "Q...",
    "..Q."],

    ["..Q.", // 解法 2
    "Q...",
    "...Q",
    ".Q.."]
    ]
    解释: 4 皇后问题存在两个不同的解法。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/n-queens
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    docker 部署springboot
    CentOS 7 安装docker
    008自瞄原理
    007根据矩阵基地址绘制方框
    006寻找矩阵
    005分析其他人基地址
    易语言读取鼠标坐标x,y
    003获取鼠标x,y
    Oracle单机Rman笔记[0]---环境准备
    系统优化设计笔记--曹大公众号文章笔记
  • 原文地址:https://www.cnblogs.com/lancelee98/p/13741207.html
Copyright © 2020-2023  润新知