zoukankan      html  css  js  c++  java
  • 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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/lancelee98/p/13741207.html
Copyright © 2011-2022 走看看