51. N-Queens

article/2025/7/23 19:38:25

目录

题目描述

方法一、回溯+每次判断是否合法

方法二、回溯+哈希

方法三、回溯+位运算


题目描述

51. N-Queens

方法一、回溯+每次判断是否合法

class Solution {vector<vector<string>> res;vector<string> chessboard;
public:vector<vector<string>> solveNQueens(int n) {chessboard.resize(n,string(n,'.'));backtrack(n,0);return res;}void backtrack(int n,int row){if(row == n){res.push_back(chessboard);return;}for(int col = 0;col < n;col++){if(valid(row,col,n)){chessboard[row][col] = 'Q';backtrack(n,row+1);chessboard[row][col] = '.';}}}bool valid(int row,int col,int n){for(int i = row-1;i>=0;i--){if(chessboard[i][col] == 'Q')return false;}for(int i = row-1,j = col-1;i>=0&&j>=0;i--,j--){if(chessboard[i][j] == 'Q')return false;}for(int i = row-1,j = col+1;i>=0&&j<n;i--,j++){if(chessboard[i][j] == 'Q')return false;}return true;}
};

方法二、回溯+哈希

记录棋盘上已经处于攻击范围的直线,将判断能否摆放新皇后的时间复杂度降为O(1)。

class Solution {vector<vector<string>> res;vector<string> chessboard;vector<bool> columns;vector<bool> diagonals1;vector<bool> diagonals2;
public:vector<vector<string>> solveNQueens(int n) {chessboard.resize(n,string(n,'.'));columns.resize(n,false);//分别有2n-1条正斜线和反斜线diagonals1.resize(2*n-1,false);diagonals2.resize(2*n-1,false);backtrack(n,0);return res;}void backtrack(int n,int row){if(row == n){res.push_back(chessboard);return;}for(int col = 0;col < n;col++){if(columns[col])continue;int diag1 = row+col;if(diagonals1[diag1])continue;int diag2 = row-col+(n-1);if(diagonals2[diag2])continue;columns[col] = true;diagonals1[diag1] = true;diagonals2[diag2] = true;chessboard[row][col] = 'Q';backtrack(n,row+1);chessboard[row][col] = '.';columns[col] = false;diagonals1[diag1] = false;diagonals2[diag2] = false;}}
};

方法三、回溯+位运算

方法二中的哈希表可以改用位运算,节省空间开销。

class Solution {vector<vector<string>> res;vector<string> chessboard;int columns;   //第i个比特位为0表示第i列能放,为1表示不能放int diagonals1;//第i个比特位为0表示第i条反斜线能放,为1表示不能放int diagonals2;//正斜线的情况
public:vector<vector<string>> solveNQueens(int n) {chessboard.resize(n,string(n,'.'));columns = 0;//分别有2n-1条正斜线和反斜线,题目保证n<=9,那么2n-1<=17,int类型一共有32个比特位够用diagonals1 = 0;diagonals2 = 0;backtrack(n,0);return res;}void backtrack(int n,int row){if(row == n){res.push_back(chessboard);return;}for(int col = 0;col < n;col++){if(columns &(1<<col))continue;int diag1 = row+col;if(diagonals1 &(1<<diag1))continue;int diag2 = row-col+(n-1);if(diagonals2 &(1<<diag2))continue;columns    |= (1<< col);diagonals1 |= (1<< diag1);diagonals2 |= (1<< diag2);chessboard[row][col] = 'Q';backtrack(n,row+1);chessboard[row][col] = '.';columns    &= (~(1<< col));diagonals1 &= (~(1<<diag1));diagonals2 &= (~(1<<diag2));}}
};

http://www.hkcw.cn/article/nPnwnJShoF.shtml

相关文章

西蒙诺维奇-炮弹导体粗糙度模型揭秘

这篇论文的作者&#xff0c;“导体表面粗糙度建模&#xff1a;从”雪球“到”炮弹“&#xff0c;[1] 认为仅凭数据表不可能对传输线进行准确建模&#xff0c;并且似乎暗示&#xff0c;因为我事先测量了数据&#xff0c;所以我神奇地”调整“了 Rz 参数&#xff0c;以获得与 EDI…

VRRP 原理与配置:让你的网络永不掉线!

VRRP 原理与配置&#xff1a;让你的网络永不掉线&#xff01; 一. VRRP 是什么&#xff0c;为什么需要它&#xff1f;二. VRRP 的核心概念三. VRRP 的工作原理四. 华为设备 VRRP 配置步骤 &#xff08;主备模式&#xff09;4.1 拓扑示例4.2 &#x1f6e0; 配置步骤 五. VRRP 配…

【深度剖析】义齿定制行业数字化转型模式创新研究(上篇3:数字化转型动机分析)

数字化转型正在重塑义齿行业的生态格局,但也面临技术融合与模式变革的深层挑战。当前,义齿定制行业正处于从传统手工制造向全流程数字化制造转型的关键阶段。3D扫描、CAD/CAM(计算机辅助设计与制造)、3D打印等技术的广泛应用,显著提升了义齿制作的精度和效率。传统石膏模型…

RustDesk 搭建自建服务器并设置服务自启动

目录 0. 介绍 1. 事前准备 1.1 有公网 ip 的云服务器一台 1.2 服务端部署包 1.3 客户端安装包 2. 部署 2.1 服务器环境准备 2.2 上传服务端部署包 2.3 运行 pm2 3. 客户端使用 3.1 安装 3.2 配置 3.2.1 解锁网络设置 3.2.2 ID / 中级服务器 3.3 启动效果 > …

Python训练营打卡Day40(2025.5.30)

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout # 先继续之前的代码 import torch import …

《智慧医疗分级评价方法及标准(2025版)》征求意见函全面解读:人工智能医疗应用的评价体系与指南方向

引言 智慧医疗作为医疗行业数字化转型的重要方向,正在通过人工智能等先进技术重塑医疗服务模式和流程。随着人工智能技术在医疗领域的广泛应用,建立科学、规范的评价体系对于推动智慧医疗健康发展具有重要意义。近期,国家卫生健康委发布了《智慧医疗分级评价方法及标准(20…

碰一碰发视频系统--基于H5场景开发

#碰一碰发视频# 旨在构建一个基于移动网页&#xff08;H5&#xff09;的视频“碰传”交互系统&#xff0c;提供类似华为/苹果设备 NFC 轻碰分享的便捷体验。其核心技术依赖于移动端可用的近场通信&#xff08;NFC 或 H5 相关 API&#xff09;和可靠的媒体数据传输方案。实现细节…

京东热点缓存探测系统JDhotkey架构剖析

热点探测使用场景 MySQL 中被频繁访问的数据 &#xff0c;如热门商品的主键 IdRedis 缓存中被密集访问的 Key&#xff0c;如热门商品的详情需要 get goods$Id恶意攻击或机器人爬虫的请求信息&#xff0c;如特定标识的 userId、机器 IP频繁被访问的接口地址&#xff0c;如获取用…

6年“豹变”,vivo S30系列引领手机进入场景“体验定义”时代

出品 | 何玺 排版 | 叶媛 5月29日晚&#xff0c;备受用户期待的vivo S30系列如约而至。 相比前几代S系列产品&#xff0c;S30系列变化显著&#xff0c;堪称“豹变”。首先&#xff0c;其产品打造思路发生了质变&#xff0c;产品体验更好&#xff0c;综合竞争力更为强。其次&a…

Visual Studio 2022 设置自动换行

Visual Studio 2022 设置自动换行 一、在 Visual Studio 菜单栏上&#xff0c;选择 工具>选项二、选择“文本编辑器”>“所有语言”>“常规” 全局设置此选项。 一、在 Visual Studio 菜单栏上&#xff0c;选择 工具>选项 二、选择“文本编辑器”>“所有语言”&…

视频监控汇聚平台EasyCVR安防小知识:如何通过视频融合平台解决信息孤岛问题?

一、项目背景与需求分析​ 随着数字化技术发展与网络带宽升级&#xff0c;视频技术应用场景不断拓展&#xff0c;视频监控、记录仪等多样化产品构建起庞大体系。但这些独立系统彼此割裂&#xff0c;形成信息孤岛。 在系统集成项目中&#xff0c;视频系统深度融合已成必然趋势…

Flutter 4.x 版本 webview_flutter 嵌套H5

踩坑早期版本 使用 WebView 代码如下 import package:flutter/material.dart; import package:webview_flutter/webview_flutter.dart;class HomePage extends StatelessWidget {const HomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(ap…

new和delete的理解

malloc、free和new、delete的区别 //malloc和free&#xff0c;称作c的库函数 //new和delete&#xff0c;称作运算符 /**********************************************/ //malloc按照字节开辟内存,返回值是void *,需要做类型强转 //仅开辟内存&#xff0c;不做初始化;malloc开…

如何用Python抓取Google Scholar

文章目录 [TOC](文章目录) 前言一、为什么要抓取Google Scholar&#xff1f;二、Google Scholar 抓取需要什么三、为什么代理对于稳定的抓取是必要的四、一步一步谷歌学者抓取教程4.1. 分页和循环4.2. 运行脚本 五、完整的Google Scholar抓取代码六、抓取Google Scholar的高级提…

海思 35XX MIPI读取YUV422

1.项目背景&#xff1a; 使用海思芯片&#xff0c;接收FPGA发送的MIPI数据&#xff0c;不需要ISP处理&#xff0c;YUV图像格式为YUV422。 2.移植MIPI驱动 修改IMX347的驱动远吗&#xff0c;将I2C读写的部分注释&#xff0c;其他的不用再做修改。 int imx347_slave_i2c_init(ot…

解压带密码的压缩包

在cmd中通过管理员方式运行 tar -xf "G:\BaiduNetdiskDownload\02-93套-22-SpringBoot.zip" -C "F:\springbootAllProject\un2" 前面是&#xff0c;你要解压的文件夹所在的路径&#xff0c;后面是你要解压到的位置 输完回车后会出现一个让你输密码的指令…

如何以 9 种方式将照片从 iPhone 传输到笔记本电脑

您的 iPhone 可能充满了以照片和视频形式捕捉的珍贵回忆。无论您是想备份它们、在更大的屏幕上编辑它们&#xff0c;还是只是释放设备上的空间&#xff0c;您都需要将照片从 iPhone 传输到笔记本电脑。幸运的是&#xff0c;有 9 种方便的方法可供使用&#xff0c;同时满足 Wind…

涨薪技术|0到1学会性能测试第91课-性能测试过程执行、分析、诊断、调节

至此关于系统资源监控、apache监控调优、Tomcat监控调优、JVM调优、Mysql调优、前端监控调优、接口性能监控调优的知识已分享完&#xff0c;今天开始学习性能测试流程知识。后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试。 性能测试过程执行 当脚本开发、场景…

智绅科技——科技赋能健康养老,构建智慧晚年新生态

当老龄化浪潮与数字技术深度碰撞&#xff0c;智绅科技以 “科技赋能健康&#xff0c;智慧守护晚年” 为核心理念&#xff0c;锚定数字健康与养老服务赛道&#xff0c;通过人工智能、物联网、大数据等技术集成&#xff0c;为亚健康群体与中老年人群构建 “监测 - 预防 - 辅助 - …

基于51单片机的音乐盒键盘演奏proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1tZCAxQQ7cvyzBfztQpk0UA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…