力扣--N皇后

题目:

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]

提示:

  • 1 <= n <= 9

该问题为典型的回溯问题,来看看代码吧

class Solution {
public:
void put_queen(int x,int y,vector<vector<int>>&attack)//x,y分别表示传进去的行和列,attack数组表示该行皇后可以攻击到的位置
{static const int dx[]={-1,1,0,0,-1,-1,1,1};static const int dy[]={0,0,-1,1,-1,1,-1,1};attack[x][y]=1;for(unsigned int i=1;i<attack.size();i++){for(int j=0;j<8;j++){unsigned int nx=x+i*dx[j];unsigned int ny=y+i*dy[j];if(nx>=0&&nx<attack.size()&&ny>=0&&ny<attack.size()){attack[nx][ny]=1;}}}
}
//line表示当前处理的行,n表示N皇后问题,queen数组表示皇后存储的位置,attack表示皇后攻击的位置,re表示存储N皇后的全部解法
void backtrack(int line,int n,vector<string>&queen,vector<vector<int>>&attack,vector<vector<string>>&re)
{if(line==n){re.push_back(queen);return;}for(int i=0;i<n;i++){if(attack[line][i]==0){vector<vector<int>> temp=attack;queen[line][i]='Q';put_queen(line,i,attack);backtrack(line+1,n,queen,attack,re);attack=temp;queen[line][i]='.';}}
}vector<vector<string>> solveNQueens(int n) {vector<vector<string>> re;//存储最终结果vector<vector<int>> attack;//标记皇后攻击位置vector<string>queen;//保存皇后位置for(int i=0;i<n;i++){attack.push_back((std::vector<int>()));for(int j=0;j<n;j++)attack[i].push_back(0);queen.push_back("");queen[i].append(n,'.');}backtrack(0,n,queen,attack,re);return re;}
};

这里我把题目链接贴上供各位查看

https://leetcode.cn/problems/n-queens/

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

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

相关文章

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日&#xff0c;百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出&#xff1a;“基本上说以后其实不会存在“程序员”这种职业了&#xff0c;因为只要会说话&#xff0c;人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种&#xff0c;一种…

Java进阶-异常处理

概述 常见运行时异常 直接继承自RuntimeException或者子类&#xff0c;编译阶段不会报错&#xff0c;运行时可能出现的错误 运行时异常&#xff1a;一般是程序员业务没有考虑好或者是编程逻辑不严谨引起的程序错误 数组索引越界异常空指针异常类型转换异常数学操作异常数字转…

离线语音模块初步学习——LSYT201B(深圳雷龙发展)

一 、产品简介 首先简单介绍下该离线语音模块&#xff0c;官方给出的介绍是&#xff1a;YT2228 是根据智能语音交互市场需求及思必驰算法的发展方向定义开发的 “芯片算法”人工智能人机语音交互解决方案&#xff0c;具有高性能、低功耗等特点。该芯片通过软硬融合的方法&…

数据丢失的谜团:文件突然不见了,却还占用着空间

在数字化时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;有时我们会遇到一个令人困惑的问题&#xff1a;明明存储在设备中的文件突然不见了&#xff0c;但磁盘空间仍被占用。这种情况究竟是怎么回事&#xff1f;我们又该如何找回这些“消失”的文件呢&#xff1f;接下…

微服务(学习)

1.Spring Cloud 5大组件有哪些&#xff1f; 一般认为的Spring Cloud五大组件是 Eureka / nacos : 注册中心 Ribbon : 负载均衡 Feign : 远程调用 Hystrix : 服务熔断 Zuul/Gateway : 网关2.服务注册和发现是什么意思&#xff1f;Spring Cloud 如何实现服务注册发现&…

ROS python实现乌龟跟随

产生两只乌龟&#xff0c;中间的乌龟(A) 和 左下乌龟(B), B 会自动运行至A的位置&#xff0c;并且键盘控制时&#xff0c;只是控制 A 的运动&#xff0c;但是 B 可以跟随 A 运行 乌龟跟随实现的核心&#xff0c;是乌龟A和B都要发布相对世界坐标系的坐标信息&#xff0c;然后&am…

vue3组件 描点定位以及监听滚动切换对应activeTab

描点定位以及监听滚动切换对应activeTab 基本逻辑 init 初始化 获取滚动区域内所有非文本子节点offsetTopArr 存储所有子节点的高度scroll 监听滚动的距离&#xff0c;找到还在可视区的元素高度 <template><div class"tab-list"><div v-for"i…

力扣HOT100 - 994. 腐烂的橘子

解题思路&#xff1a; 因为要记录轮数&#xff08;分钟数&#xff09;&#xff0c;所以不能一口气遍历到底&#xff0c;所以不能用深搜&#xff08;bfs&#xff09;&#xff0c;而要用广搜&#xff08;bfs&#xff0c;层序遍历&#xff09;。 先记录下新鲜橘子数&#xff0c;…

理解控制反转

好久之前写的学习笔记&#xff0c;一直落在草稿箱里今天才发现&#xff0c;既然写了就补发出来吧~ 当需要实现不同操作时&#xff0c;用户和程序员都无需修改&#xff0c;只需要修改xml配置即可。 代码体现&#xff1a; 不同接口的实现类&#xff1a; xml具体配置 通过set注入…

GO语言写Prometheus自定义node-exporter的Docker容器测试

1. 安装docker-compose 执行以下命令&#xff0c;安装docker-compose到CentOS7.9环境中&#xff1a; # 下载二进制文件 sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/d…

后端面试---分布式微服务

分布式&微服务 分布式1、什么时候用到分布式开发三级目录 微服务 分布式 1、什么时候用到分布式开发 三级目录 微服务 1、谈谈你对微服务的理解&#xff0c;什么时候用微服务 2、若A服务请求B服务B1接口&#xff0c;B1接口又请求A服务的A2接口&#xff0c;会不会有问题…

Qt : 在QTreeWidget中添加自定义右键菜单

一、引言 如图&#xff0c;我们需要在一个QTreeWidget 控件中添加了自定义右键菜单。 二、思路 如何做到的呢&#xff0c;很简单。浅浅记录和分享一下。 继承QTreeWidget&#xff0c;定义一个子类CustomTreeWidget &#xff0c;在重写contextMenuEvent 事件即可。 三、代…

单链表(详解)

目录 一.链表的介绍二.链表的各种方法单链表的结构初始化链表为链表开辟新节点打印链表尾插头插尾删头删查找指定位置之前插入指定位置之后插入删除(pos)节点删除节点&#xff08;pos&#xff09;之后的节点链表的销毁&#xff08;节点被一个一个地销毁&#xff09; 一.链表的介…

linux调试-访问物理地址

1. devmem 方式 rootraspberrypi:/home/niyu# busybox devmem 0x7e215000 8 0xa rootraspberrypi:/home/niyu# busybox devmem 0x7e215000 8 0x0A rootraspberrypi:/home/niyu# busybox devmem 0x7e215000 8 0xb rootraspberrypi:/home/niyu# busybox devmem 0x7e21500…

如何制作个性又美观的二维码?自定义Logo、样式,还能一键复用

草料二维码提供基础的二维码美化设置&#xff0c;包含Logo、颜色、码点码眼、容错、添加文字等设置。 还提供150标签样式&#xff0c;标签样式中所有内容&#xff0c;包括LOGO、背景、字段数量等&#xff0c;均可修改。 同时&#xff0c;支持将样式保存到账号下&#xff0c;方…

磨损对输送带安全的影响

磨损对输送带安全的影响 在工业生产中&#xff0c;输送带作为重要的物流传输设备&#xff0c;广泛应用于煤炭、化工、冶金、电力、建材等多个行业。然而&#xff0c;输送带在使用过程中不可避免地会出现磨损现象&#xff0c;这不仅会影响其使用寿命&#xff0c;还可能对生产安…

vue-router学习3:路由传参方式

路由传参的方式主要有两种&#xff1a;query传参和params传参。 1. Query 传参 首先&#xff0c;在路由配置文件中&#xff08;通常是 router/index.ts&#xff09;&#xff0c;定义你的路由&#xff1a; import { createRouter, createWebHistory } from vue-router; imp…

从递归角度串联二叉树-图论-动态规划

一、深度理解二叉树的前中后序遍历 二叉树遍历框架如下&#xff1a; void traverse(TreeNode* root) {if (root nullptr) {return;}// 前序位置traverse(root->left);// 中序位置traverse(root->right);// 后序位置 }先不管所谓前中后序&#xff0c;单看 traverse 函数…

常见的工业路由器访问问题

A&#xff1a;工业路由器已经设置了pptp怎么访问路由下面的电脑 1. 确认PPTP VPN设置&#xff1a;首先&#xff0c;确保PPTP VPN服务器在工业路由器上已正确设置&#xff0c;并且处于活动状态。这包括确保VPN服务器的IP地址、端口、用户名和密码等设置正确无误。 2. 连接到VP…

硬件24、嘉立创EDA丝印的优化和调整

1、调整全部丝印的属性 先选中一个丝印&#xff0c;然后右键点击它&#xff0c;选择查找&#xff0c;然后选择查找全部 选择查找全部这个时候可以设置所有丝印在元件的位置了&#xff0c;布局-》属性位置&#xff0c;位号&#xff0c;属性位置设置为上边&#xff0c;这时丝印就…