7-4 N皇后 (28 分)(思路+详解)

一:题目 Come 宝!!!!!!!!!!!!

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法

输入格式:
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;

输出格式:
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量

输入样例:
在这里给出一组输入。例如:

1
8
5

结尾无空行
输出样例:
在这里给出相应的输出。例如:

1
92
10

二:关于输入

这里只要输入一个值有一个结果即可,嗯嗯就是这样的

三:思路

思路:
1.这里在选择建树(也就是在选择解的空间上)是 子集树
2.那么在结点上我们选择的是一个二维的矩阵就是将最后的结果落实到一个二维容器里
也就遍历到叶节点时候一种可行解的情况
3.写码思路:
<1>:递归函数的参数:
backtacking(int row,vector &v,int n)
row:代表矩阵的行数
vector &v:存放的是最后二维矩阵的可行解
n:代表的是棋盘的宽度和长度
<2>:输出结果
这里使用 vector<vector> v;
来处理每次的可行接
<3>:单层循环
这里横向每层的循环是遍历不同的列,横向的是递归二维矩阵不同的行(往下进行)
<4>:递归终止条件
当 row == n 时候,我们就可以将一次可行解装入容器了
在这里插入图片描述

4.这里还需补充的是在递归函数里,我们在每次选择皇后的位置的时候要注意题目的要求
不同行,不同列 不在同一条斜线上
不同行:因为我们是逐层往下递归的所以不同行我们就解决了
不同列:这里看代码
不在一条斜线上:(分为45° 和 135°) 这里图解

在这里插入图片描述

四:上码

/**思路:1.这里在选择建树(也就是在选择解的空间上)是 子集树2.那么在结点上我们选择的是一个二维的矩阵就是将最后的结果落实到一个二维容器里也就遍历到叶节点时候一种可行解的情况3.写码思路:1>:递归函数的参数:backtacking(int row,vector<string> &v,int n)row:代表矩阵的行数vector<string> &v:存放的是最后二维矩阵的可行解n:代表的是棋盘的宽度和长度2>:输出结果这里使用 vector<vector<string >> v;来处理每次的可行接3>:单层循环这里横向每层的循环是遍历不同的列,横向的是递归二维矩阵不同的行(往下进行)4>:递归终止条件当 row == n 时候,我们就可以将一次可行解装入容器了4.这里还需补充的是在递归函数里,我们在每次选择皇后的位置的时候要注意题目的要求不同行,不同列 不在同一条斜线上不同行:因为我们是逐层往下递归的所以不同行我们就解决了不同列:这里看代码不在一条斜线上:(分为45° 和 135°) 这里图解     **/#include<bits/stdc++.h>
using namespace std;vector<vector<string> > ans;//判断位置是否合法
bool isLegal(int row,int cal,vector<string> &v,int n){//判断是否在一列上for (int i = 0; i < row; i++) {//这里我们只判断从row往上的行即可if (v[i][cal] == 'Q') return false;}//判断是否在135°斜线上上for (int i = row - 1, j = cal - 1; i >= 0 && j >= 0; i--,j--) {if (v[i][j] == 'Q') return false;}//判断是否在45°斜线上for (int i = row - 1,j = cal + 1; i >= 0 && j <= n; i--,j++){if (v[i][j] == 'Q') return false;}return true; }void backtacking(int row,vector<string> &v,int n) {if (row == n) {ans.push_back(v);return;}for (int cal = 0; cal < n; cal++) {//cal:列if (isLegal(row,cal,v,n)) {v[row][cal] = 'Q';//这是满足条件的backtacking(row+1,v,n);v[row][cal] = '.';//当一次可行结果 结束后,需要v将空间腾出来,给后面的可行解 }}
}void solveNQueens(int n) {vector<string>v (n,string(n,'.'));//这传入的就是默认的二维矩阵..backtacking(0,v,n);// return ans;}int main(){int N;cin >> N;solveNQueens(N);cout << ans.size();} 

在这里插入图片描述

五:贴心杰来补充了

1:码中 ‘Q’

宝 如果这道题有些地方看不懂比如题目中输入的 Q 什么的,那是我先AC的leedcode上的一道题,做出来那道后,我就直接改了改,就拿来了,如果实在看不懂可以看看下面 这个题解,也是N皇后问题
leedcodeN皇后

2:码中还有一个是vector path (n,string(n,’.’))

vector path (n,string(n,’.’)):中(n,string(n,’.’))这部分就是一个初始化
用这个容器的时候 你可能不太懂,其实那就是 一个 二维数组,用来存每次的可行解的,你想想宝 ,我们每次的结果都是在二维矩阵中的一些位置,所以我们肯定需要一个二维的容器来记录啊!!
得亏我是宠粉杰啊,直接上示例,

#include<bits/stdc++.h>
using namespace std;int main(){vector<string> v(5,string(5,'.'));for(int i = 0; i < 5; i++){for(int j = 0; j < 5; j++){cout << v[i][j] << ' ';}cout << endl;}} 

在这里插入图片描述

加油 宝!!!

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

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

相关文章

内存不够用还要速度快,终于找到可以基于 File 的 Cache 了

一&#xff1a;背景1. 讲故事18年的时候在做纯内存项目的过程中遇到了这么一个问题&#xff0c;因为一些核心数据都是飘在内存中&#xff0c;所以内存空间对我们来说额外宝贵&#xff0c;但偏偏项目中有些数据需要缓存&#xff0c;比如说需要下钻的报表上的点&#xff0c;基于性…

计算机网络:如何传输一条数据(详解)

一&#xff1a;不同的localhost如何传送信息 1:图示概览图 (1):无注解 (2):有注解 这里我在这个线路层中又连了一些新的 sw 和 router 其实还可以连更多&#xff0c;相当于一个网状的 注意同一个网络中只有一个网关&#xff0c;形象点理解网关就是通往别的网洛的大门 在下方…

为什么我们需要Logstash,Fluentd等日志摄取器?

前文传送门&#xff1a;如何利用NLog输出结构化日志&#xff0c;并在Kibana优雅分析日志&#xff1f;疑问&#xff1a;既然应用能直接向ElasticSearch写日志&#xff0c;为什么我们还需要Logstash,Fluentd等日志摄取器&#xff1f;而且这些日志摄取器组件还成为日志收集的事实标…

7-1 装载问题 (10 分)(思路+详解)

一&#xff1a;题目 Come 宝宝&#xff01;&#xff01; 输出格式: 输出所有可行的方案数量 输入样例1: 3 50 50 10 40 40结尾无空行 输出样例1: 4结尾无空行 输入样例2: 3 50 50 20 40 40结尾无空行 输出样例2: 0二:思路 1.这个解的空间选择的是子集树 2.递归函数参数 b…

程序员是终身学习的职业,应该怎么学习?

在上一篇《一款用了就不想走的工具》中介绍了一款工具 Notion &#xff0c;可以做学习的规划、时间的管理、学习的记录等&#xff0c;但学习本身还是需要一些方法的&#xff0c;本文谈谈我对学习的一些感悟。不管你是刚刚进入职场的新人&#xff0c;还是工作多年的老兵&#xf…

7-2 批处理作业调度 (10 分)(思路+详解)

一&#xff1a;题目:宝宝 你要永远开心&#xff0c;下雪了&#xff0c;多穿点&#xff0c; 输入格式: 第一行输入作业个数n。 第二行输入各任务在机器一上的完成时间。 第三行输入各任务在机器二上的完成时间。 输出格式: 最短完成时间和 输入样例: 3 2 3 2 1 1 3结尾无空…

WindowsSdkDir 从何处来?

缘起 我在《修复被破坏的 vs 工程设置》和《修复被破坏的 vs 工程设置&#xff08;续&#xff09;》这两篇文章中&#xff0c;分享了调查 VS 包含路径错误的问题&#xff0c;感兴趣的小伙伴儿可以查看。依稀记得在 2013 年的时候调查过类似的问题。前一阵子没翻到&#xff0c;这…

7-3 符号三角形 (10 分)(思路+详解)

一&#xff1a;题目 Come 宝 &#xff01;&#xff01;&#xff01; 输入格式: 第一行符号个数n 输出格式: 符合要求的三角形个数 输入样例: 4结尾无空行 输出样例: 6二:思路 思路: 1.如果我们确立的第一行的符号是什么 &#xff0c;那么我们就可以基本上确定我们的符号三…

7-1 内存分区分配--首次适应算法 (100 分)

一&#xff1a;题目7-1 内存分区分配–首次适应算法 (100 分) 宝 今天你看我博客了吗 输入内存的大小和阈值minsize&#xff0c;按照首次适应算法进行连续的分区分配。在划分时&#xff0c;若剩余的内存小于等于minsize&#xff0c;则将整块内存分配给该进程不再进行划分。 根…

如何在生产环境下用好EFCore

原文链接&#xff1a;https://www.thereformedprogrammer.net/handling-entity-framework-core-database-migrations-in-production-part-2/作者&#xff1a;Jon P Smith在生产中运用EFCore的模式实战这是使用EF Core迁移数据库的系列文章中的第二篇。本文着眼于将迁移应用于数…

39. 组合总和020(思路+详解)

一&#xff1a;题目&#xff1a; 给定一个无重复元素的正整数数组 candidates 和一个正整数 target &#xff0c;找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。 candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同&#xff0c;则两种…

8种方法解决vue创建项目报错:command failed: npm install --loglevel error

8种方法解决vue项目创建失败问题1、重建项目2、清除缓存3、重装淘宝源4、修改useTaobaoRegistry5、重装node6、删除npmrc文件7、 node版本问题8、css编辑工具选择9、管理员身份运行踩了这个巨大的坑&#xff01;&#xff01; 试了一个晚上终于找到了创建项目成功了T_T 当报错了…

40. 组合总和 II021(回溯法)

一&#xff1a;题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 注意&#xff1a;解集不能包含重复的组合。 示例 1:输入: candidates [10,1,2,…

.NET Core + Kubernetes:Helm

Helm[1] 作为 Kubernetes 体系的包管理工具&#xff0c;已经逐渐成为了应用分发标准&#xff0c;在 .NET 开发中&#xff0c;可以理解为与 NuGet 包类似。回顾之前文章中的介绍&#xff0c;Kubernetes 中单个服务的部署有时会涉及到多种资源类型&#xff0c;如&#xff1a;Depl…

vue项目中引入阿里图标iconfont

vue如何在创建好的项目中引入阿里图标iconfont呢&#xff0c;涉及到以下几个步骤&#xff1a; 1、首先先到阿里图标官方网站https://www.iconfont.cn/&#xff0c;先对账户进行登录&#xff0c;登录完成后任意选择几个图标加入购物车 2、加入购物车后&#xff0c;点击页面最右…

78. 子集022(回溯法)

一&#xff1a;题目 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;…

vue项目中使用vue-router进行路由配置及嵌套多级路由

在vue项目中&#xff0c;很多时候我们需要二级路由或者三级路由来跳转页面&#xff0c;但大部分需求下我们都只用到了二级路由&#xff0c;有小伙伴就会发现&#xff0c;用到三级路由的时候&#xff0c;就会突然不知所措&#xff0c;是有新的方法呢&#xff0c;还是跟二级路由配…

解决流氓软件方法(亲测有效)

一:问题描述 本来我想在百度上下载一个API文档&#xff0c;我当然知道是取官网上下载了&#xff0c;但是我想要的是中文版&#xff0c;所以我就搜啊搜&#xff0c;搜到脚本之家 &#xff0c;那里面可以下载&#xff0c;我记得以前在里面下载过东西&#xff0c;以为安全就去下载…

.NET Core:跨平台和开源,让我在框架中脱颖而出

自从 2016 年微软发布了 .NET Core 1.0&#xff0c;至今 4 年的时间里&#xff0c;.NET Core 历经 7 个正式版本和几十个 Preview 版本。.NET Core 作为最通用的框架&#xff0c;和其他软件框架不同的是&#xff0c;它面向 Windows、Linux 和 MacOS 多个平台&#xff0c;在桌面…

vue实现侧边折叠菜单栏手风琴效果

在我们做管理后台亦或是产品流程时&#xff0c;总是需要一个菜单栏或者导航栏来架起我们的产品架构&#xff0c;那么&#xff0c;如何用vue实现侧边折叠导航栏呢&#xff1f;接下来将一一介绍。 请先看效果演示图。 步骤1&#xff1a;先架构整个页面的布局&#xff0c;撰写html…