【计蒜客】2n皇后问题

2023-10-26

在这里插入图片描述

思路

此题与n皇后问题十分类似,也是利用递归回溯求解。这题放2n个皇后,我采取的做法是,先放n个黑皇后,再放n个白皇后,具体实现见代码,一些细节方面我都标注出来了,并且做了详细解释。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=10;
int mp[N][N];
bool vy[N],vd[2*N],uvd[2*N];//这里用来给黑皇后做标记,列,正对角线,反对角线
bool vis[N][N];//这里给放过黑皇后的地方做标记,放过了黑皇后以后,白皇后就不能放在这个位置了
bool vy1[N],vd1[2*N],uvd1[2*N];//这里用来给黑皇后做标记,列,正对角线,反对角线
int n;
int ans;//答案

void dfs_w(int a);

//放入黑皇后函数
void dfs_b(int x){
    if(x==n){//黑皇后放完了,那么开始从第一行放白皇后
        dfs_w(0);
        return ;
    }
    
    for(int i=0;i<n;i++){
        if(mp[x][i]!=0 && !vy[i] && !vd[x+i] && !uvd[i-x+n]){//判断当前位置不能为0,当前列,对角线,反对角线没有被放过
            vis[x][i]=true;//给当前位置放入黑皇后
            vy[i]=vd[x+i]=uvd[i-x+n]=1;//标记
            dfs_b(x+1);
            vy[i]=vd[x+i]=uvd[i-x+n]=0;//移除标记
            vis[x][i]=false;//移除黑皇后
        } 
    }
}

//放入白皇后函数
void dfs_w(int a){
    if(a==n){//白皇后到最后一行的下一行时,答案++;
        ans++;
        return ;
    }
    
    for(int i=0;i<n;i++){
        if(mp[a][i]!=0 && !vy1[i] && !vd1[a+i] && !uvd1[i-a+n] && !vis[a][i]){
            vis[a][i]=true;
            vy1[i]=vd1[a+i]=uvd1[i-a+n]=1;
            dfs_w(a+1);
            vy1[i]=vd1[a+i]=uvd1[i-a+n]=0;
            vis[a][i]=false;
        } 
    }
}

int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>mp[i][j];
        }
    }
    
    dfs_b(0);
    cout<<ans<<endl;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计蒜客】2n皇后问题 的相关文章

  • 数论 费马小定理+快速幂取模

    D Sum Time Limit 1000MS Memory Limit 131072KB 64bit IO Format I64d I64u Submit Status Description Input 2 Output 2 Hint
  • 商用服务器性能,安全与性能兼顾的商用服务器推荐

    数据作为企业生存之本 如果没有好的商用服务器为其安全性保驾护航 企业就会变成无本之木 而在众多商用服务器推荐中 能将稳定性能 快速处理 高安全性等优点集一身的当属全球销量独占鳌头的戴尔14代PowerEdge服务器 作为现代化数据中心的基石
  • 关于“使用rand()产生的随机数每次得到的结果相同”的问题

    之前使用rand 产生随机数出现了一个怪问题 一直没能理解 初次出现的随机数数列是1111 5556 3543 6434 3245 再次运行 产生的结果仍然是1111 5556 3543 6434 3245 再运行 仍然是1111 5556
  • apt命令

    在基于 Debian 的 Linux 发行版中 有各种工具可以与 APT 进行交互 以方便用户安装 删除和管理的软件包 apt get 便是其中一款广受欢迎的命令行工具 另外一款较为流行的是 Aptitude 这一命令行与 GUI 兼顾的小
  • 利用python进行图像视觉基础练习

    练习内容为 1 对于图像进行均值滤波和中值滤波 2 对于图像的第二个波段 进行灰度图自适应均衡化 输出为单波段影像 3 对于图像的第三个波段进行阈值处理和自适应阈值处理 输出为单波段影像 4 对于图像先进行二值化 再进行两种形态学处理 开运
  • iocp之简单实现

    一 步骤 二 代码 1 头文件 include
  • 简单爬虫Ajax数据爬取——今日头条图片爬取

    一 Ajax简介 什么是Ajax Ajax 即 Asynchronous Javascript And XML 异步 JavaScript 和 XML 是指一种创建交互式网页应用的网页开发技术 通过在后台与服务器进行少量数据交换 Ajax
  • npm install 失败的解决方案

    npm install 失败的解决方案 1 展示如下 2 解决方案 1 删除package lock json的文件 2 执行以下的代码 执行npm install force 或者 npm install legacy peer deps
  • php 操作redis

    原文地址 http www cnblogs com weafer archive 2011 09 21 2184059 html PHP redis中文文档 phpredis是php的一个扩展 效率是相当高有链表排序功能 对创建内存级的模块
  • OpenCV - C++实战(01) — OpenCV简介

    目录 第1章 OpenCV简介 1 1 简介 1 1 1 OpencV 库简介 1 1 2 命名空间 1 2 OpenCV模块 1 3 装载 显示和存储图像 1 3 1 创建图像 1 3 2 读取图像 1 3 3 定义窗口与显示图像 1 3
  • 07.Spring Bean 加载 - BeanDefinitionReader

    基本概念 BeanDefinitionReader 该接口的作用就是加载 Bean 在 Spring 中 Bean 一般来说都在配置文件中定义 而在配置的路径由在 web xml 中定义 所以加载 Bean 的步骤大致就是 加载资源 通过配
  • 服务器系统reid,服务器主机做reid

    服务器主机做reid 内容精选 换一换 安装并启动Agent后 迁移Agent会自动收集源端服务器信息并发送给主机迁移服务默认迁移任务下 收集的所有信息仅用于数据迁移 不会用做其他用途 具体收集源端哪些信息可查看主机迁移服务会收集源端的哪些
  • C语言怎么判断文件是否为空

    http zhidao baidu com question 58621913 html fr qrl cid 866 index 1 fr2 query 文件为空时 只有文件结束符EOF 当读取第一个字符是EOF时即可判断文件是不是空 i
  • 【Java面试题】用float型定义变量:float = 3.14;,是否正确?

    题目 用float型定义变量 float 3 14 是否正确 解析 不正确 赋值运算符 左右两边的精度类型不匹配 在默认情况下 包括小数点的实数 如本题中的3 14 被存储为double类型 即双精度 而float类型定义的变量 如本题中的
  • 【测评】思维导图的战争!手绘和数字思维导图哪个更实用?

    思维导图是我们在工作中非常广泛运用的工具 能够有效的理清思维 并清晰的展示给他人共享 而在这之中又分为了两派 一派支持手绘思维导图 一派支持数字思维导图 究竟哪一个更好 它们之间可以平衡吗 gt gt 数字思维导图最好的体现是什么 手写和绘
  • BasicDao

    DBUtil Druid任然存在不足 如果再进行一次封装 gt BasicDao作为实现所有数据库常用的基础查询操作 1 所有数据库操作的基础类 public class BasicDao
  • 字符串补全空格是一种常见的字符串处理操作,它可以用于在字符串的两侧或者特定位置插入空格,以使字符串的长度达到指定的长度

    字符串补全空格是一种常见的字符串处理操作 它可以用于在字符串的两侧或者特定位置插入空格 以使字符串的长度达到指定的长度 在Python中 我们可以使用多种方法实现字符串的补全空格操作 下面是一些常见的方法及其示例代码 1 使用字符串的内置方
  • java中的锁(一)(Synchronized)

    JAVA中的锁 乐观锁 悲观锁 自旋锁 synchronized 原子性 可见性 有序性 可重入性 Synchronized底层原理 JAVA中的锁主要用于保障多线程中数据的一致性 在使用对象或者方法之前加锁 此时如果有其他线程也需要使用该
  • 一次暴露面全开的红帽渗透测试【getshell】

    声明 本文仅限于技术讨论与分享 严禁用于非法途径 若读者因此作出任何危害网络安全行为后果自负 与本号及原作者无关 0x01 信息收集阶段 注 本次信息收集过程主要使用FOFA网络探测平台 https fofa info 一开始进行收集的时候

随机推荐

  • COCOAPI评价指标解析及改进

    程序入口 python eval coco py 特别说明 results test json格式如下 image id 19 category id 1 bbox 121 4 116 02 560 56 303 83 score 0 97
  • windows下安装redis和redis扩展

    windows下安装redis 下载地址 https github com MSOpenTech redis releases Redis 支持 32 位和 64 位 这个需要根据你系统平台的实际情况选择 这里我们下载 Redis x64
  • 链路mtu

    常常见到交换机和网卡说明中提到支持Jumbo Frame 但我一直对以太网的Jumbo Frame 巨帧 如何使用不太理解 今日在网上找到2则现摘录下来 相信看了以后大家会有收获 这是一种厂商标准的超长帧格式 专门为千兆以太网而设计 目前还
  • 移动硬盘需要格式化才能打开如何解决?

    当我们把移动硬盘接入 就提示需要格式化 这是对我们有多大的仇怨啊 其实不是这样的 当频繁使用可移动硬盘很容易造成损坏 有时甚至会提示格式化 而提示要格式化是硬盘出现了问题导致的 那么什么原因才会出现的情况呢 遇到移动硬盘需要格式化才能打开如
  • 【算法训练 (day2)】积木画(dp问题)

    目录 一 问题 题目描述 输入格式 输出格式 输出样例 二 解题思路 合法性判定 状态压缩 推导dp式 代码实现 一 问题 题目描述 小明最近迷上了积木画 有这么两种类型的积木 分别为 I 型 大小为 2 个单位面积 和 L 型 大小为 3
  • Spdlog库编译/交叉编译

    1 只包含头文件 速度很快 无需依赖第三方库 支持跨平台 Linux Windows on 32 64 bits 支持多线程 可对日志文件进行循环输出 可每日生成日志文件 可支持控制台日志输出 可选的异步日志 可定义日志格式 2 获取spd
  • centos7下opencv3.4.1 的安装和编译全解

    centos7下opencv3 4 1 的安装和编译全解 一 下载和安装 1 下载网址 https opencv org 注意系统版本 2 linux下依赖库安装 正式安装opencv之前 需要安装好opencv编译的依赖包 列举如下 1
  • 【Pandas】修改Pandas的行或列的名字(重命名)

    pandas DataFrame rename 使用函数 DataFrame rename mapper None index None columns None axis None copy True inplace False leve
  • 编译Android 2.3源码错误总结

    虽然版本2 3很老了 但是这是在完全新的Ubuntu上面编译的 可以使我们更加熟练 1 host C acp lt build tools acp acp c
  • BP神经网络在数据预测上的应用

    用BP神经网络做数据预测有两种形式 1 根据自身已有的数据预测未来的数据 比如 根据2000 2012年已知GDP的值预测2013年GDP的值 求解 用2000 2001 2002的值作为输入 2003作为输出 然后以此类推 2001 20
  • DEDE后台添加新变量出现:Request var not allow!的解决办法

    论坛上很多人都反馈说在后台添加新变量的时候会出现 Request var not allow 的BUG错误 本文主要就是介绍如何去解决这个问题 下面看具体操纵 在DEDE根目录打开 include common inc php 文件 查找到
  • pycharm 2019.2 安装包失败

    简介 最近使用学生账号注册了pycharm 貌似全家桶都可以免费用了 就升级了pycharm到最新版 但是在使用包管理 安装包的时候出错了 提示没有匹配的版本 下面还提示一个 trusted host pypi douban com 右下角
  • es搜索 核心指标_ElasticSearch核心知识总结(一)es的六种搜索方式和数据分析

    es的六种搜索方式 query string search GET ecommerce product search 查询所有数据 took 4 耗费几毫秒 timed out false 是否超时 shards 数据拆分成5个分片 对所有
  • Qt编写软件注册功能

    一 软件目的 应项目需求 需要为编写的软件添加一层保护 防止滥用 二 软件环境 Qt5 9 Windows 主要加密算法 MD5 MD5简单介绍 MD5是一种不可逆的加密算法 类似计算hash值 不同的数据字符无论长短 经过MD5计算后都会
  • Pip快速离线安装pytorch-gpu

    Pip快速离线安装pytorch gpu 1小节讲解涉及的基本概念 读者也可直接从2小节开始 1 安装pythorch涉及的基本组件概念 1 1 显卡驱动Driver 常识概念 此处略过 1 2 CUDA CUDA Compute Unif
  • 二维邮局选址问题-带权中位数

    算法设计练习作业 邮局选址问题 将自己写的分享 有问题请指正 希望共同学习 关于邮局选址问题的理论知识就不赘述了 网上有讲解的 include
  • Python 入门基础

    第一个Python程序之打印 Hello World print Hello World 字符串定义的三种方式 type 用了检测数据类型 单引号定义法 使用单引号进行包围 name 测试 print type name 双引号定义法 na
  • Mysql审核查询平台Archery部署

    目录 1 Archery产品介绍 2 基于docker搭建Archery 2 1 系统环境 2 2 安装 Docker 2 2 1 安装 Docker Compose 2 2 2 下载Archery 2 2 3 安装并启动 2 2 4 表结
  • jdk8

    文章目录 1 场景再现 2 Supplier
  • 【计蒜客】2n皇后问题

    思路 此题与n皇后问题十分类似 也是利用递归回溯求解 这题放2n个皇后 我采取的做法是 先放n个黑皇后 再放n个白皇后 具体实现见代码 一些细节方面我都标注出来了 并且做了详细解释 代码 include