C++ n皇后问题 || 深度优先搜索模版题

n−
皇后问题是指将 n
个皇后放在 n×n
的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
在这里插入图片描述

现在给定整数 n
,请你输出所有的满足条件的棋子摆法。

输入格式
共一行,包含整数 n

输出格式
每个解决方案占 n
行,每行输出一个长度为 n
的字符串,用来表示完整的棋盘状态。

其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。

每个方案输出完成后,输出一个空行。

注意:行末不能有多余空格。

输出方案的顺序任意,只要不重复且没有遗漏即可。

数据范围
1≤n≤9
输入样例:
4
输出样例:
.Q…
…Q
Q…
…Q.

…Q.
Q…
…Q
.Q…
按照全排列的思想:我们可以分析出来每一行有一个皇后,然后枚举每行的皇后放在哪一列的位置上去

#include <iostream>using namespace std;const int N = 10;
int n;
bool col[N], dg[N], udg[N];
char g[N][N];void dfs(int u)
{if(u == n){for(int i = 0; i < n; i ++ ){for(int j = 0; j < n; j ++ )printf("%c", g[i][j]);printf("\n");}printf("\n");}for(int i = 0; i < n; i ++ ) //当前就是枚举第u行皇后该放在哪一列。{if(!col[i] && !dg[u + i] && !udg[n - u + i]) //当前列、对角线、反对角线都没有放过{g[u][i] = 'Q';col[i] = dg[u + i] = udg[n - u + i] = true;dfs(u + 1);col[i] = dg[u + i] = udg[n - u + i] = false;g[u][i] = '.';}}
}int main ()
{scanf("%d", &n);for(int i = 0; i < n; i ++ )for(int j = 0; j < n; j ++ )g[i][j] = '.';dfs(0);return 0;
}

对每个位置进行放或者不放的深搜:

#include <iostream>using namespace std;const int N = 10;
int n;
bool cow[N], col[N], dg[N], udg[N];
char g[N][N];void dfs(int x, int y, int s) //依次枚举每个格子,放或者不放
{if(y == n) y = 0, x ++; //到达行末,转到下一行开始if(x == n){if(s == n){for(int i = 0; i < n; i ++ ) puts(g[i]);printf("\n");}return;}dfs(x, y + 1, s); // 不放if(!cow[x] && !col[y] && !dg[x + y] && !udg[x - y + n]){g[x][y] = 'Q';cow[x] = col[y] = dg[x + y] = udg[x - y + n] = true;dfs(x, y + 1, s + 1);cow[x] = col[y] = dg[x + y] = udg[x - y + n] = false;g[x][y] = '.';}
}int main ()
{scanf("%d", &n);for(int i = 0; i < n; i ++ )for(int j = 0; j < n; j ++ )g[i][j] = '.';dfs(0, 0, 0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷达信号处理——恒虚警检测(CFAR)

雷达信号处理的流程 雷达信号处理的一般流程&#xff1a;ADC数据——1D-FFT——2D-FFT——CFAR检测——测距、测速、测角。 雷达目标检测 首先要搞清楚什么是检测&#xff0c;检测就是判断有无。雷达在探测的时候&#xff0c;会出现很多峰值&#xff0c;这些峰值有可能是目标…

C++学习笔记(三十三):c++ 宏定义

本节对c的宏定义进行描述。c使用预处理器来对宏进行操作&#xff0c;我们可以写一些宏来替换代码中的问题&#xff0c;c的宏是以#开头&#xff0c;预处理器会将所有的宏先进行处理&#xff0c;之后在通过编译器进行编译。宏简单说就是文本替换&#xff0c;可以替换代码中的任何…

swarm节点间通信问题-关闭checksum校验和

现场还原 客户有n台redhat虚拟机&#xff0c;构建了一个swarm集群&#xff0c;服务起来后&#xff0c;发现不同节点间的服务&#xff0c;无法互相访问。经运维大佬排查是服务器的checksum校验是开启状态&#xff0c;关闭即可~ 查看checksum状态 ethtool -k 内网网卡名称 | g…

Rhinoceros 8(犀牛8)中文授权版支持Win/Mac

Rhinoceros 8&#xff0c;也称为犀牛8&#xff0c;是一款专业的三维建模软件&#xff0c;深受设计师们的喜爱。这款软件为设计师提供了无限的创意空间和强大的工具&#xff0c;无论他们是产品设计师、建筑师还是工业设计师。 Rhinoceros 8采用了先进的NURBS建模技术&#xff0c…

Kafka外网访问

文章目录 一、背景二、需求三、调研四、配置内外网访问 一、背景 kafka机器只有内网IP&#xff0c;没有绑定外网网卡&#xff0c;但是可以在防火墙或通过其他有公网IP的设备上进行公网IP端口的映射。 二、需求 kafka集群端口映射后&#xff0c;可以通过外网IP端口进行数据生…

基于JavaWeb+BS架构+SpringBoot+Vue+Hadoop短视频流量数据分析与可视化系统的设计和实现

基于JavaWebBS架构SpringBootVueHadoop短视频流量数据分析与可视化系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目  录 目  录 I 1绪 论 1 1.1开发背景 1 1.2开…

k8s集群配置NodeLocal DNSCache

一、简介 当集群规模较大时&#xff0c;运行的服务非常多&#xff0c;服务之间的频繁进行大量域名解析&#xff0c;CoreDNS将会承受更大的压力&#xff0c;可能会导致如下影响&#xff1a; 延迟增加&#xff1a;有限的coredns服务在解析大量的域名时&#xff0c;会导致解析结果…

Python 语言基础

目录 Python 语言基础语法特点注释缩进规范编写规则命名规范 变量保留字与标识符Python中的变量定义变量 基本数据类型数字字符串Bool类型数据类型转换 输入和输出input&#xff08;&#xff09;输入print 输出 Python 语言基础 语法特点 注释 单行注释&#xff0c;语法如下…

transbigdata笔记:数据栅格化

1 area_to_grid 在边界或形状中生成矩形栅格 1.1 主要使用方法 transbigdata.area_to_grid(location, accuracy500, methodrect, paramsauto) 1.2 主要参数 location (bounds(List) or shape(GeoDataFrame) 生成栅格的位置。 如果边界为 [lon1&#xff0c; lat1&#xff0…

Syslog发送日志+Logstash处理日志

Syslog发送日志 Syslog&#xff08;System Logging Protocol&#xff09;是一种用于计算机系统日志记录的标准协议。它允许设备&#xff08;如服务器、路由器、防火墙等&#xff09;将事件消息发送到指定的日志收集服务器&#xff0c;以便集中管理和分析。通过使用Syslog&…

【MySQL】MySQL基本语句

1.使用 MySQL 客户端登录&#xff1a; 打开终端并运行以下命令&#xff0c;使用你的 MySQL 用户名和密码登录到 MySQL 服务器&#xff1a; mysql -u your_username -p2.连接成功后&#xff0c;运行以下 SQL 查询语句来获取数据库的数量&#xff1a; SHOW DATABASES;3.选择数据…

从传统训练到预训练和微调的训练策略

目录 前言1 使用基础模型训练手段的传统训练策略1.1 随机初始化为模型提供初始点1.2 目标函数设定是优化性能的关键 2 BERT微调策略: 适应具体任务的精妙调整2.1 利用不同的representation和分类器进行微调2.2 通过fine-tuning适应具体任务 3 T5预训练策略: 统一任务形式以提高…

[BJDCTF2020]ZJCTF,不过如此

题目源码&#xff1a; <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>".file_get_contents($tex…

Echarts 引入地图

# 地图数据获取 获取地址&#xff1a;DataV.GeoAtlas地理小工具系列 # 地图渲染 // 地图 mapOption: { title: {text: 作物省市分布图,left: left,subtext: provincial and cities distribution of crops }, // 浮窗样式 tooltip: {show: true, // 提示浮窗是否显示trigger:…

C++学习笔记(二十一)

一、set/multiset容器 1. set基本概念 简介&#xff1a;所有元素都会在插入时自动被排序 本质&#xff1a;set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现的 set和multiset的区别&#xff1a;set不允许容器中有重复的元素&#xff0c;multiset允许容器中有…

数学建模 | 一文读懂:支持向量机(matlab源码)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 支持向量机 1 支持向量分类机的基本原理1.1 线性可分支持向量分类机1.2…

数据分析基础之《pandas(1)—pandas介绍》

一、pandas介绍 1、2008年Wes McKinney&#xff08;韦斯麦金尼&#xff09;开发出的库 2、专门用于数据分析的开源python库 3、以numpy为基础&#xff0c;借力numpy模块在计算方面性能高的优势 4、基于matplotlib能够简便的画图 5、独特的数据结构 6、也是三个单词组合而…

使用numpy处理图片——图片拼接

大纲 左右拼接上下拼接 在《使用numpy处理图片——图片切割》一文中&#xff0c;我们介绍了如何使用numpy将一张图片切割成4部分。本文我们将反其道而行之&#xff0c;将4张图片拼接成1张图片。 基本的思路就是先用两张图以左右结构拼接成上部&#xff0c;另外两张图也以左右拼…

2024年Ubuntu18.04执行do-release-upgrade报错的解决方案

2024年Ubuntu18.04执行do-release-upgrade报错的解决方案 背景报错情况解决方法先升级可用的软件包执行 do-release-upgrade方法一&#xff1a;直接执行 github 上写好的脚本方法二&#xff1a;手动执行 还原配置 背景 公司用的信服云&#xff0c;公共镜像中最新的Ubuntu镜像是…

ansible从入门到精通(完整篇)

文章目录 01 Ansible介绍与安装1. 介绍 Ansible1.1 什么是 Ansible?1.2 Ansible 无需代理1.3 Ansible 方式 2. 安装 Ansible2.1 控制节点2.2 受管主机2.3 基于Windows的受管主机2.4 受管网络设备2.5 安装Ansible 02 部署Ansible1. 构建Ansible清单1.1 定义清单1.2 使用静态清单…