leetcode 51N皇后

简介: leetcode 51N皇后

N皇后

56f3c2a6d4d14d32a49b53d643a00eec.png递归遍历

主要是去除同行和同列

class Solution {
public:
    vector<vector<string>> result;
    vector<int>path;
    //求绝对值
    int abs(int a)
    {
        if (a < 0) return -a;
        else return a;
    }
    void backtraking(int n ,vector<bool> &used ,int deep)
    { 
      //当深度大于n时返回
        if(deep > n) return;
        //当路径为最大深度,找到路径存入
        if(path.size() == n)
        {
          //将数字路径转换成字符串路径
            vector<string> path_s;
            for(int i=0;i<n;i++)
            {
                string tmp ;
                for(int k=0;k<n;k++) tmp +='.';//建立n个.
                for(int j=0;j<n;j++)  if(j==path[i]) tmp[j] = 'Q';//在应该放Q的位置放Q
                path_s.push_back(tmp);//转换好的字符串存入路径
            }
            //存入结果
            result.push_back(path_s);
            return;
        }
    //层次循环,找到每一行的点。
        for(int i=0 ; i<n; i++)
        {
            if(used[i] == true) continue; //该点用过了,跳过。一个树枝的点只能用一次
            pair<int,int> x(deep,i);//当前可能有效点
            bool flag = true;
            //当前点,和path路径里面所有点依次对比
            for(int j =0 ; j < path.size() ;j++)
            {
                pair<int,int> y(j,path[j]);//path之前加入的点
                //检测当前点与之前路径点,是否在一列一行和对角线
                if( abs(x.first - y.first)==0 ||  abs(x.second - y.second)==0 
                    || abs(x.first - y.first) == abs(x.second - y.second) ) 
                    flag = false;
            }
            //检测是合格点,加入path
            if(flag == true)
            {
              //记录该点使用
                used[i] = true;
                path.push_back(i);
                //递归,深度+1(找下一行)
                backtraking(n,used,deep+1);
                path.pop_back();
                used[i] = false;
            }
        }
        return;
    }
    vector<vector<string>> solveNQueens(int n) { 
        vector<bool> used(n,false);
        backtraking(n ,used,0);
        return result;
    }
};



相关文章
|
监控 数据可视化 前端开发
高效管理团队表现:构建可视化的贡献度面板组件
高效管理团队表现:构建可视化的贡献度面板组件
341 0
|
存储 小程序 API
深入调查研究Memos
【11月更文挑战第1天】
556 7
|
存储 人工智能 数据挖掘
通义灵码的隐私保护机制
在数字化时代,用户隐私保护至关重要。通义灵码作为先进的AI代码生成工具,通过数据加密、匿名化处理及符合GDPR与CCPA等隐私法规的代码生成,有效保护用户隐私,降低法律风险,增强用户信任,促进业务发展。
通义灵码的隐私保护机制
|
存储 持续交付 开发者
掌握Docker容器化:提升开发效率与应用部署
【10月更文挑战第4天】在现代软件开发中,Docker容器化技术因其轻量级、可移植和快速部署的特点,成为提升开发效率和简化部署流程的关键工具。本文介绍了Docker的基本概念、核心组件及其优势,并探讨了如何在开发环境中搭建、微服务架构及CI/CD流程中有效利用Docker,助力软件开发更加高效便捷。
|
网络协议 算法 安全
【网络协议基础】TCP/IP协议大全
TCP/IP协议是现代计算机网络通信的基础,是互联网及局域网广泛使用的一套协议。TCP/IP协议集采用分层模型,以便于网络的设计、实现和管理。
1457 2
|
数据可视化 数据挖掘 C++
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
580 2
|
前端开发 应用服务中间件 nginx
安装Windows版nginx以及部署前端代码并就解决刷新出现404
安装Windows版nginx以及部署前端代码并就解决刷新出现404
3689 0
|
弹性计算 运维 监控
2022云优化论坛 | 阿里云发布云上成本管理解决方案白皮书,助力企业经济用云
2022年12月14日,由中国信息通信研究院和中国通信标准化协会联合主办的“2022首届云优化创新发展论坛”通过线上方式成功召开。本届论坛以“更经济·更高效·更深度”为主题,会上阿里云计算有限公司产品专家王奇能发表了《云上成本管理,通过FinOps实现经济用云》的演讲,对业财一体化和FinOps理念实践经验做出了分享。
2022云优化论坛 | 阿里云发布云上成本管理解决方案白皮书,助力企业经济用云
|
Oracle IDE Java
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
809 0
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
|
消息中间件 SpringCloudAlibaba RocketMQ
SpringCloud Alibaba微服务实战三十二 - 集成RocketMQ实现分布式事务
SpringCloud Alibaba微服务实战三十二 - 集成RocketMQ实现分布式事务
848 0

热门文章

最新文章