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

  • 相关阅读:
    《C++ Primer(第五版)》知识巩固
    Ubuntu下配置安装Hadoop 2.2
    Golang框架beego和bee的开发使用
    C++下混合编译c语言方法总结
    算法导论学习笔记1---排序算法(平台:gcc 4.6.7)
    基于web端去除空格小工具
    Google Map API抓取地图坐标信息小程序
    【算法导论】散列表
    【算法导论】二叉搜索树
    【算法导论】基本数据结构
  • 原文地址:https://www.cnblogs.com/lancelee98/p/13741207.html
Copyright © 2011-2022 走看看