52. N-Queens II

2023-11-09

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.
这里写图片描述

思路:此题虽然是N皇后问题的变体,但还是可以用N皇后的思路去解决,只是用了一个set来存储合法的皇后

bool isNQueens(vector<int>& res){
    for (int i = 0; i < res.size(); i++){
        for (int j = i + 1; j < res.size(); j++){
            if (i - j == res[i] - res[j] || i - j == res[j] - res[i])return false;
        }
    }
    return true;
}

void dfs_SolveNQueens(vector<int>& res, int pos, set<vector<int>>& tt){
    if (pos == res.size()){
        if (isNQueens(res)){
            tt.insert(res);
        }
        return;
    }

    for (int i = pos; i < res.size(); i++){
        swap(res[i], res[pos]);
        dfs_SolveNQueens(res, pos + 1, tt);
        swap(res[i], res[pos]);
    }
}

int totalNQueens(int n){
    if (n == 0)return 0;
    vector<int> temp;
    for (int i = 0; i < n; i++)temp.push_back(i);
    set<vector<int>> res;
    dfs_SolveNQueens(temp, 0, res);
    return res.size();
}

思路1可能有重复的计算量

bool safe(vector<int>& res, int c){
    for (int i = 0; i < c; i++){
        if (res[i] == res[c] || abs(res[i] - res[c] == abs(i - c)))
            return false;
    }
    return true;
}

void dfs_SloveNQueens(int &cnt, vector<int>& res, int n, int c){
    if (c == n){
        cnt++;
        return;
    }
    for (res[c] = 0; res[c] < n; res[c]++){
        if (safe(res, c))dfs_SloveNQueens(cnt, res, n, c + 1);
    }
}
int totalNQueens(int n){
    vector<int> res(n);
    int cnt = 0;
    dfs_SloveNQueens(cnt, res, n, 0);
    return cnt;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

52. N-Queens II 的相关文章

  • Linux系统删除文件夹下所有文件

    这篇文章来为大家介绍一下如何在 Linux 系统下删除文件 当 Linux 系统使用时间过长以后 难免会产生一些垃圾文件 这些文件除了会占用磁盘空间之外还会降低系统的运行效率 所以长时间运行后我们需要及时的清理一下这些垃圾文件 rm 是一个
  • 基于Hadoop的云盘系统上传和下载效率优化及处理大量小文件的解决方法

    基于任何平台实现的云盘系统 面临的首要的技术问题就是客户端上传和下载效率优化问题 基于Hadoop实现的云盘系统 受到Hadoop文件读写机制的影响 采用Hadoop提供的API进行HDFS文件系统访问 文件读取时默认是顺序 逐block读

随机推荐

  • 第7章 指针 第6题

    题目 Julian历法是用年及这一年中的第几天来表示日期 设计一个函数将Julian历法表示的日期转换成月和日 如Mar8 注意闰年的问题 函数返回一个字符串 即转换后的月和日 如果参数有错 如天数为第370天 返回NULL 代码 incl
  • superset官方文档的安装和配置

    原文 https superset incubator apache org installation html 下载 git clone https github com apache incubator superset cd incu
  • 数据结构-----顺序表与单链表的实现

    1 顺序表 实现顺序表的初始化 插入 删除 查找 逆置 合并等操作 include
  • Python numpy函数:reshape()

    reshape 是数组对象中的方法 用于改变数组的形状 形状变化是基于数组元素不能改变的 变成的新形状中所包含的元素个数必须符合原来元素个数 如果数组元素发生变化的时候 就会报错 reshape函数生成的新数组和原始数组公用一个内存 也就是
  • 【数据库】数据库入门(七): 函数依赖(Functional Dependencies)

    前言 一个设计良好的数据库模式 database schema 应该要具备以下特点 完整性 Completeness 减少冗余 Redundancy freeness 一致的含义 Consistent understanding 良好的性能
  • QFileInfo获取文件信息

    它可以获取很多文件的信息 比如文件的大小 文件的类型 文件的创建日期等等 下面是获取一些文件信息的方法 先要头文件 include
  • 跨境市场下一个蓝海:区块链+跨境支付?

    全球经济的现在需要跨境支付的场景越来越多 比如出国旅游 求学 海外购物等 但是跨境支付中会面临高昂手续费 交易过程繁琐 收款时间漫长等问题 跨境市场 下一个蓝海 随着近年来跨境电商的迅猛发展 越来越多的优质海外商品郑加速进入中国市场 跨境市
  • vite --- 为什么选Vite

    目录 什么是Vite 为什么选Vite 现实问题 为什么生产环境仍需打包 Vite 与竞品 什么是Vite Vite 法语意为 快速的 发音 vit 发音同 veet 是一种新型前端构建工具 能够显著提升前端开发体验 它主要由两部分组成 一
  • 版本号的正则表达式

    验证版本号的正则表达式 要求 必须是三位 x x x的形式 每位x的范围分别为1 99 0 99 0 99 不允许的情况0 x x 01 x x x 0x x x 00 x x x 00 x x 0x 满足这些条件的正则为 1 9 d 1
  • 电路基础_模拟电路_问答_2023_02

    101 图解分析法 饱和失真和截止失真都是由晶体管输入 输出特性的非线性造成 统称为非线性失真 为减小非线性失真 必须合理选择静态工作点的位置并适当限制输入信号的幅度 图解法分析放大器 1 确定静态工作点 分析电路参数对Q点的影响 2 根据
  • Android http网络请求设置以及设置网络权限

    在project下 一 HTTP网络请求设置 第一步 在res的xml目录下 新建一个xml文件 名称 network security config xml 在 network security config xml 中添加代码
  • 准备离职搞ue4

    确实不合适搞webgl 我决定离职了 得到一个offer UE4 估计看我c 图形学还行吧 年龄偏大 没有UE4经验 也没有长期游戏经验 所以ue4岗位被拒很多 工作机会来之不易 得拼命干了 憋着一肚子气 webgl再努力 也是难以发挥 哎
  • C++ 基础技术再深入(模板)template parameter和template argument(10)---《C++ Templates》

    参数化声明 template和class或者function的区别在于templates声明语句有一个参数化子句 template lt parameters here gt 或者 export template lt parameters
  • codeforces 1217d D. Coloring Edges

    题意 一个有向图 染色 环的边不能只有1个颜色 问需几种颜色及染色方案 最多2种颜色 无环时1种 有环时2种 用dfs判环 类似tarjan 还在栈中的点又被访问就有环 backedge染2 其他染1 简化一下 如果有环ai
  • bash:XXX.sh权限不够

    在linux上执行shell脚本时提示 bash start sh权限不够 解决办法 chmod 777 start sh
  • feof()和EOF的用法—— C中文件结尾的判断

    昨天突然被一位朋友问到了关于文件结尾的程序问题 在用feof 判断文件时 复制会多产生一个字符 这个问题在大一的时候 老师上课就强调过 但那时只是模糊的记得个大概 记得这个函数如果用的不对就是会出现问题 解决是要先读一下 然后再判断 具体的
  • 【ODOO15源码安装步骤 亲测成功】

    ODOO15源码安装步骤 亲测成功 odoo ubuntu 安装方法 进入ubuntu 后 运行 sudo apt update sudo apt upgrade 下面正式安装 odoo 相关的 东东 一 安装postgresql 安装po
  • 诛仙哪里炼器服务器最稳定,诛仙手游150级之前最稳妥炼器攻略

    1 此方法适用于心不太野的V7 V9玩家 2 此方法不适用于装备上15 3 此方法不太适用于首饰炼器 4 此方法可以保证你的战力水平保持在所在服务器中等偏上 5 此方法只能保证过渡装备 100 130级 的炼器 终极装备炼器无用 一 炼器之
  • 记录:Sharding-Jdbc 配置max.connections.size.per.query造成的死锁问题

    记录 Sharding Jdbc 配置max connections size per query造成的死锁问题 项目场景 版本 jdk11 sharding jdbc4 1 1 mysql8 0 分表 table表根据 主键id 水平分表
  • 52. N-Queens II

    Follow up for N Queens problem Now instead outputting board configurations return the total number of distinct solutions