当前位置: 首页 > news >正文

2. 皇后的控制力

题目描述:

我们对八皇后问题进行扩展。

国际象棋中的皇后非常神勇,一个皇后可以控制横、竖、斜线等4个方向(或者说是8个方向),只要有棋子落入她的势力范围,则必死无疑,所以对方的每个棋子都要小心地躲开皇后的势力范围,选择一个合适的位置放置。如果在棋盘上有两个皇后,则新皇后控制的势力范围与第一个皇后控制的势力范围可以进行叠加,这样随着皇后数量的增加,皇后们控制的范围越来越大,直至控制了棋盘中全部的格子。

现在我们关心的是,如果在 N×N 的棋盘上放入 M 个皇后(M个皇后相互之间不能冲突)控制棋盘中的格子,则共有多少种不同的放置方法?

输入:N (N <= 10)  M (M <= N)

输出:如果将 M 个皇后放入 N×N 的棋盘中可以控制全部棋盘中的格子,则不同的放置方法的数量

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 2 1↵
以文本方式显示
  1. 4↵
1秒64M0
测试用例 2以文本方式显示
  1. 3 1↵
以文本方式显示
  1. 1↵
1秒64M0

C++代码 

#include <iostream>
#include <vector>using namespace std;int totalSolutions = 0; // 用于记录不同的放置方法的数量// 检查当前位置是否安全
bool isSafe(int row, int col, const vector<string>& board, int N) {// 检查列for (int i = 0; i < row; ++i) {if (board[i][col] == 'Q') {return false;}}// 检查左上对角线for (int i = row, j = col; i >= 0 && j >= 0; --i, --j) {if (board[i][j] == 'Q') {return false;}}// 检查右上对角线for (int i = row, j = col; i >= 0 && j < N; --i, ++j) {if (board[i][j] == 'Q') {return false;}}return true;
}bool checkControl(const vector<string>& board, int N) {for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {if (board[i][j] == '.') {// 检查当前空点是否被控制bool controlled = false;// 检查列for (int k = 0; k < N; ++k) {if (board[k][j] == 'Q') {controlled = true;break;}}// 检查行for (int k = 0; k < N; ++k) {if (board[i][k] == 'Q') {controlled = true;break;}}// 检查左上对角线for (int k = i, l = j; k >= 0 && l >= 0; --k, --l) {if (board[k][l] == 'Q') {controlled = true;break;}}// 检查右上对角线for (int k = i, l = j; k >= 0 && l < N; --k, ++l) {if (board[k][l] == 'Q') {controlled = true;break;}}// 检查左下对角线for (int k = i, l = j; k < N && l >= 0; ++k, --l) {if (board[k][l] == 'Q') {controlled = true;break;}}// 检查右下对角线for (int k = i, l = j; k < N && l < N; ++k, ++l) {if (board[k][l] == 'Q') {controlled = true;break;}}if (!controlled) {// 如果有任何空点没有被控制,则返回falsereturn false;}}}}// 所有空点都被控制,返回truereturn true;
}// 递归解决问题
void solveNQueensUtil(int row, int N, int M, vector<string>& board) {if (row == N) {if (M == 0 && checkControl(board, N)) {totalSolutions++; // 找到一个解决方案}return;}// 尝试在当前行的每一列放置皇后for (int i = 0; i < N; ++i) {if (isSafe(row, i, board, N)) {board[row][i] = 'Q'; // 放置皇后solveNQueensUtil(row + 1, N, M - 1, board); // 递归到下一行board[row][i] = '.'; // 回溯,移除皇后}}// 如果当前行不放置皇后,也递归到下一行solveNQueensUtil(row + 1, N, M, board);
}// 解决N皇后问题
int solveNQueens(int N, int M) {vector<string> board(N, string(N, '.'));solveNQueensUtil(0, N, M, board);return totalSolutions;
}int main() {int N, M;cin >> N >> M;cout <<  solveNQueens(N, M) << endl;return 0;
}

相关文章:

2. 皇后的控制力

题目描述&#xff1a; 我们对八皇后问题进行扩展。 国际象棋中的皇后非常神勇&#xff0c;一个皇后可以控制横、竖、斜线等4个方向&#xff08;或者说是8个方向&#xff09;&#xff0c;只要有棋子落入她的势力范围&#xff0c;则必死无疑&#xff0c;所以对方的每个棋子都要…...

南京邮电大学数据库实验二

1. 用create database命令创建电影数据库(MovieDB)。 create database MovieDB; 在创建表之前需调用一下指定的数据库&#xff1a; use MovieDB; 2.在电影数据库中用create table 命令创建如下5个关系模式&#xff1a; 创建movies表&#xff1a; create table Movies( ti…...

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询&#xff1a; where字句的子查询&#xff1a; 通常用in关键字&#xff1a; 举个例子&#xff1a; in关键字&#xff1a; not in 关键字&#xff1a; in 也可以用于枚举集合&#xff1a; where中可以用子查询来作为集合来筛选元祖。 some&#xff0c;all的运算符号…...

提升英语学习效率,尽在Eudic欧路词典 for Mac

Eudic欧路词典 for Mac是一款专为英语学习者打造的强大工具。无论您是初学者还是高级学习者&#xff0c;这款词典都能满足您的需求。 首先&#xff0c;Eudic欧路词典 for Mac具备丰富的词库&#xff0c;涵盖了各个领域的单词和释义。您可以轻松查询并学习单词的意思、用法和例…...

计算机网络英文总结

物理层 数据链路层 循环冗余校验(Cyclic Redundancy Check) 点对点协议PPP(Point-to-Point Protocol) 链路控制协议(Link Control Protocol) 网络控制协议(Network Control Protocol) 网络层(network layer) IP(Internet Protocol) 网际协议 ARP(Address…...

Spring上下文之注解模块ConfigurationMethod

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…...

【深度学习】强化学习(三)强化学习的目标函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数1. 总回报&#xff08;Return&#xff09;2. 折扣回报&#xff08;Discounted Return&#xff09;a. 折扣率b. 折扣回报的定义 3.…...

Python高级算法——人工神经网络(Artificial Neural Network)

Python中的人工神经网络&#xff08;Artificial Neural Network&#xff09;&#xff1a;深入学习与实践 人工神经网络是一种模拟生物神经网络结构和功能的计算模型&#xff0c;近年来在机器学习和深度学习领域取得了巨大成功。本文将深入讲解Python中的人工神经网络&#xff…...

深入理解JVM设计的精髓与独特之处

这是Java代码的执行过程 从软件工程的视角去深入拆解&#xff0c;无疑极具吸引力&#xff1a;首个阶段仅依赖于源高级语言的细微之处&#xff0c;而第二阶段则仅仅专注于目标机器语言的特质。 不可否认&#xff0c;在这两个编译阶段之间的衔接&#xff08;具体指明中间处理步…...

fastjson序列化与反序列化的忽略

一.场景 做了一个基于springbootfastjson的小应用。A对象与B对象是OneToMany关系。A对象新增时也希望一起传递B的信息到后台进行Many端数据的新增。直接使用A对象来接收前台传递的信息&#xff0c;springboot会帮我们组装好对象。查询A对象时&#xff0c;又不希望其中的List<…...

【TB作品】基于单片机的实验室管理系统,STM32,GM65二维码扫描模块

硬件&#xff1a; &#xff08;1&#xff09;STM32F103C8T6最小板&#xff08;&#xff09; &#xff08;2&#xff09;GM65二维码扫描模块 &#xff08;3&#xff09;DS1302实时时钟模块 &#xff08;4&#xff09;AT24C02 存储设备 &#xff08;5&#xff09;蜂鸣器 &#xf…...

超过 1450 个 pfSense 服务器因错误链而遭受 RCE 攻击

在线暴露的大约 1450 个 pfSense 实例容易受到命令注入和跨站点脚本漏洞的攻击&#xff0c;这些漏洞如果链接起来&#xff0c;可能使攻击者能够在设备上执行远程代码。 pfSense 是一款流行的开源防火墙和路由器软件&#xff0c;允许广泛的定制和部署灵活性。 它是一种经济高效…...

react面试总结2

redux中sages和thunk中间件的区别&#xff0c;优缺点 Redux 中的 redux-saga 和 redux-thunk 都是中间件&#xff0c;用于处理异步操作&#xff0c;但它们有一些区别。 Redux Thunk&#xff1a; 简单易用&#xff1a;redux-thunk 是比较简单直观的中间件&#xff0c;它允许 …...

hive 常见存储格式和应用场景

1.存储格式 textfile、sequencefile、orc、parquet sequencefile很少使用&#xff08;不介绍了&#xff09;&#xff0c;常见的主要就是orc 和 parquet 建表声明语句是&#xff1a;stored as textfile/orc/parquet行存储&#xff1a;同一条数据的不同字段都在相邻位置&#xff…...

PyPDF2库对PDF实现读取的应用

目录 一、PyPDF2 库的使用 1. 文档打开和页面读取 2. 文本提取功能 3. 示例代码...

C++ stack用法详解

stack 栈适配器是一种单端开口的容器&#xff08;如图 1 所示&#xff09;&#xff0c;实际上该容器模拟的就是栈存储结构&#xff0c;即无论是向里存数据还是从中取数据&#xff0c;都只能从这一个开口实现操作。 图 1 stack 适配器示意图 如图 1 所示&#xff0c;stack 适配器…...

QT案例 使用WMI获取win_32类的属性值,包括Win32提供程序类中的属性

最近涉及到读取WINDOWS 系统电脑设备的各种信息&#xff0c;在一些特殊的PE或者简化系统中是没有WMI查询工具的&#xff0c;所以就自己写了个查询大部分WMI属性值的工具&#xff0c;免去了查网站的功夫。涉及到的方法内容就汇总做个总结。 PS:因为工作中软件基本都是我一个人开…...

TCP/UDP 的特点、区别及优缺点

1.TCP协议 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP协议通过建立连接、数据确认&#xff08;编段号和确认号&#xff09;和数据重传等机制&#xff0c;保证了数据的可靠性…...

使用 Python 使用贝叶斯神经网络从理论到实践

一、说明 在本文中&#xff0c;我们了解了如何构建一个机器学习模型&#xff0c;该模型结合了神经网络的强大功能&#xff0c;并且仍然保持概率方法进行预测。为了做到这一点&#xff0c;我们可以构建所谓的贝叶斯神经网络。 这个想法不是优化神经网络的损失&#xff0…...

Linux 中的网站服务管理

目录 1.安装服务 2.启动服务 3.停止服务 4.重启服务 5.开机自启 6.案例 1.安装服务 网址服务程序 yum insatll httpd -y 查看所有服务 systemctl list-unit-files 2.启动服务 systemctl start httpd 查看服务进程&#xff0c;确认是否启动 ps -ef|grep httpd 3.停止…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...