【打卡】牛客网:BM59 N皇后问题

自己写的:

①想自己定义结构体node,发现find函数太麻烦。看了眼模板,就用一个vector<int>记录行号就行,索引自然而然就是列号。

②想用for循环写(未通过)

还在想这和模拟差不多。后来才意识到,还得是递归啊。

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param n int整型 the n* @return int整型*/bool inGroup(vector<int> huanghouGroup, int x1, int n){// 检验的点:第x1行第y1列int y1 = huanghouGroup.size();for(int y2 = 0; y2 < y1; y2++){// huanghouGroup里的点:第x2行第y2列int x2 = huanghouGroup[y2];// huanghouGroup里有在第x1行摆下皇后if( x2 == x1 )return true;// 是对角线 abs(1.0*(列-列)/(行-行)) == 1.0 if(abs(1.0 * (y1 - y2) / (x1 - x1) ) == 1.0)return true;}return false;}void dfs(vector<int> huanghouGroup, int y, int x, int n){if(y == n)return;if(inGroup(huanghouGroup, x, n))return;for(int j = 0; j < n; j++){dfs(huanghouGroup, y+1, j, n);}}int Nqueen(int n) {// write code herevector<vector<int>> res;for (int i = 0; i < n; i++) {  //第0列,遍历所有行cout<<i<<endl;vector<int> huanghouGroup;  //记录每列的行号huanghouGroup.push_back(i);  //第0列第i行摆下皇后int flag = 0; //该策略可行for (int j = 1; j < n; j++) { //第1列开始遍历for(int k = 0; k < n; k++){  //第j列,遍历所有行//如果可以放下皇后:if (!inGroup(huanghouGroup,k,n)){huanghouGroup.push_back(k);break; //粗心忘记加了,【此时此刻,意识到该用dfs】}}if (huanghouGroup.size() != j + 1) { //第j列所有行都遍历完了,却没有放下皇后flag = 1;break;}}//如果这种策略可行,并且之前没有出现过if(flag == 0 && find(res.begin(), res.end(), huanghouGroup) == res.end())res.push_back(huanghouGroup);}return res.size();}
};

③递归(通过)

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param n int整型 the n* @return int整型*/bool inGroup(vector<int> huanghouGroup, int x1, int n) {// 检验的点:第x1行第y1列int y1 = huanghouGroup.size();for (int y2 = 0; y2 < y1; y2++) {// huanghouGroup里的点:第x2行第y2列int x2 = huanghouGroup[y2];// huanghouGroup里有在第x1行摆下皇后if (x2 == x1)return true;// 是对角线 abs(1.0*(列-列)/(行-行)) == 1.0 if (abs(1.0 * (y1 - y2) / (x1 - x2)) == 1.0)return true;}return false;}void dfs(vector<vector<int>>& res, vector<int> huanghouGroup, int y, int x, int n) { //第y列第x行if (inGroup(huanghouGroup, x, n))return;huanghouGroup.push_back(x);if (y == n-1) { res.push_back(huanghouGroup);return;}for (int j = 0; j < n; j++) {dfs(res, huanghouGroup, y + 1, j, n);}huanghouGroup.pop_back();}int Nqueen(int n) {// write code herevector<vector<int>> res;vector<int> huanghouGroup;  //记录每列的行号for (int i = 0; i < n; i++) {dfs(res, huanghouGroup, 0, i, n);}return res.size();}
};

注:

采用for循环里push的方法,结果会多出n个重复的策略方案。因为在for循环里push,需要在下一次递归里面判断长度和放入res,最终导致:倒数第二层已经是我们需要的答案了,但是在for循环会重复n次递归,在最后一层判断长度和放入res。 

void dfs(vector<vector<int>>& res, vector<int> huanghouGroup, int y, int x, int n) { if (inGroup(huanghouGroup, x, n))return;if (y == n) { res.push_back(huanghouGroup);return;}for (int j = 0; j < n; j++) {huanghouGroup.push_back(x);dfs(res, huanghouGroup, y + 1, j, n);huanghouGroup.pop_back();}}

for循环外面push,就能解决重复答案的问题。调试很久:判断长度。

void dfs(vector<vector<int>>& res, vector<int> huanghouGroup, int y, int x, int n) if (inGroup(huanghouGroup, x, n))return;huanghouGroup.push_back(x);if (y == n-1) {  //调式很久,判断长度,不是(y == n)res.push_back(huanghouGroup);return;}for (int j = 0; j < n; j++) {dfs(res, huanghouGroup, y + 1, j, n);}huanghouGroup.pop_back();}

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

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

相关文章

Ubuntu22.04 交叉编译GCC13.2.0 for Rv1126

一、安装Ubuntu22.04 sudo apt install vim net-tools openssh-server 二、安装必要项 sudo apt update sudo apt upgrade sudo apt install build-essential gawk git texinfo bison flex 三、下载必备软件包 1.glibc https://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.gz…

引迈-JNPF低代码项目技术栈介绍

从 2014 开始研发低代码前端渲染&#xff0c;到 2018 年开始研发后端低代码数据模型&#xff0c;发布了JNPF开发平台。 谨以此文针对 JNPF-JAVA-Cloud微服务 进行相关技术栈展示&#xff1a; 1. 项目前后端分离 前端采用Vue.js&#xff0c;这是一种流行的前端JavaScript框架&a…

Doris的分区表和分桶表

1 列定义 以AGGREGATE KEY数据模型为例进行说明。更多数据模型参阅Doris数据模型。 列的基本类型,可以通过在mysql-client中执行HELP CREATE TABLE; 查看。 AGGREGATE KEY数据模型中,所有没有指定聚合方式(SUM、REPLACE、MAX、MIN)的列视为Key列。而其余则为Value列。 定义…

SQLServer 数字加千分位 用FORMAT函数强转不管多大位数

问题 CONVERT ( money, CONVERT ( money, CAST ( round( FTP_AMOUNT, 2 ) AS NUMERIC ( 20, 2 ) ) ) 1 ) AS FTP_AMOUNT用的money函数 结果空间不足&#xff0c;无法将 money 值转换为 varchar。 可以强转 select FORMAT(CAST ( round( ‘-8926143870680.62000000’, 2 ) AS N…

Java WebSocket框架

引言 随着互联网和移动互联网的迅猛发展&#xff0c;实时通信成为了应用程序的一项重要能力。WebSocket作为一种在Web上实现双向通信的协议&#xff0c;极大地丰富了Web应用程序的交互方式。而在Java领域&#xff0c;也有许多优秀的WebSocket框架可供选择&#xff0c;本文将介…

4D毫米波雷达和3D雷达、激光雷达全面对比

众所周知&#xff0c;传统3D毫米波雷达存在如下性能缺陷&#xff1a; 1&#xff09;静止目标和地物杂波混在一起&#xff0c;难以区分&#xff1b; 2) 横穿车辆和行人多普勒为零或很低&#xff0c;难以检测&#xff1b; 3) 高处物体和地面目标不能区分&#xff0c;容易造成误刹…

从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。随着小卫星星座的普及&#xff0c;对地观测已具备多次以上的全球覆盖…

CentOS上搭建SVN并自动同步至web目录

一、搭建svn环境并创建仓库&#xff1a; 1、安装Subversion&#xff1a; yum install svn2、创建版本库&#xff1a; //先建目录 cd /www mkdir wwwsvn cd wwwsvn //创建版本库 svnadmin create xiangmumingcheng二、创建用户组及用户&#xff1a; 1、 进入版本库中的配…

部署单仓库多目录项目

部署单仓库多目录项目 文章目录 部署单仓库多目录项目1.部署单仓库多目录项目2.Shell脚本进行部署单仓库多目录项目2.1 编写Shell脚本2.2 Demo推送代码及测试 3.小结 1.部署单仓库多目录项目 #部署单仓库多目录项目 在开发过程中,研发团队往往会将一个大型项目拆分成几个子目录…

MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(一)

在嵌入式系统开发中&#xff0c;选择一个合适的图形用户界面&#xff08;GUI&#xff09;库是至关重要的。在屏幕上显示的时候&#xff0c;使用现成的图形库&#xff0c;这样开发人员就不需要弄清楚底层任务&#xff0c;例如如何绘制像素、线条、形状&#xff0c;如果再高级一点…

Java LinkedList链表、HashSet、HashMap

一、Java LinkedList&#xff1a; 链表&#xff08;LinkedList&#xff09;是一种常见的基础数据结构&#xff0c;是一种线性表&#xff0c;在每一个节点里存储下一个节点的地址。链表分为单向链表和双向链表。单向链表包含两个值&#xff1a;当前节点的值和指向下一个节点的链…

基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码

基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于骑手优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

2021秋招-总目录

2021秋招-目录 知识点总结 预训练语言模型: Bert家族 1.1 BERT、attention、transformer理解部分 B站讲解–强烈推荐可视化推倒结合代码理解代码部分常见面试考点以及问题: word2vec 、 fasttext 、elmo;BN 、LN、CN、WNNLP中的loss与评价总结 4.1 loss_function&#xff1…

基础算法:大数除以除以13

基础算法&#xff1a;大数除以一个数 信息学奥赛&#xff1a;1175&#xff1a;除以13 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 输入一个大于0的大整数N&#xff0c;长度不超过100位&#xff0c;要求输出其除以13得到的商和余数。 【输入】 一个大于0的大整数&…

基于AVR单片机的移动目标视觉追踪系统设计与实现

基于AVR单片机的移动目标视觉追踪系统是一种常见的应用领域&#xff0c;旨在通过摄像头采集图像数据并使用图像处理和追踪算法实现对移动目标的实时追踪。本文将介绍基于AVR单片机的移动目标视觉追踪系统的设计原理和实现步骤&#xff0c;并提供相应的代码示例。 1. 设计概述 …

C语言中的大端字节序和小端字节序是什么?如何进行字节序的转换?

C语言中的大端字节序和小端字节序以及字节序的转换 引言 在计算机科学中&#xff0c;字节序是指多字节数据在存储或传输过程中字节的排列顺序。在C语言中&#xff0c;特别是在涉及二进制数据的处理、网络通信以及硬件相关的编程中&#xff0c;了解大端字节序和小端字节序的概…

QJsonObject经过哪些转换才能发送到UDP端口

一、QJsonObject转换为QJsonDocument 二、将 QJsonDocument 转换为 JSON 字符串&#xff0c;以便输出或传输 三、将 QString 转换为 QByteArray 四、发送到UDP端口 // 将 QJsonObject 转换为 QJsonDocument QJsonDocument jsonDocument(jsonobj); // 将 QJsonDocument 转换为 J…

基于SSM的校内互助交易平台设计

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

使用 AWS boto3 库从 s3 桶中批量下载数据

文章目录 一、Boto3 快速安装二、账户配置三、代码示例3.1 下载单个文件3.2 下载文件夹内全部文件 官方文档 一、Boto3 快速安装 安装 Boto3 之前&#xff0c;先安装 Python 3.8 或更高版本&#xff1b;对 Python 3.6 及更早版本的支持已弃用。 通过 pip 安装最新的 Boto3 版…