一:题目 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;}}

加油 宝!!!

7-4 N皇后 (28 分)(思路+详解)相关推荐

  1. 10-4 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格 (10 分)思路+详解+测试用例

    前言:测试用表 贴心杰将这个测试表分享给大家 ,如果大家做题的时候发现那个点过不去,一定不要直接看别人的博客,先自己测试用例,如果思路也对 ,验证数据也对,还有错误 你再看看别人的思路!!! CREA ...

  2. 7-43 字符串关键字的散列映射 (25 分)(思路+详解+不懂的兄弟们来呀)兄弟们我干了5个小时,一个一个测试点过的

    一:题目 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位 ...

  3. 7-32 哥尼斯堡的“七桥问题” (25 分)(思路+详解+题目分析)两种做法任选其一

    一:题目: 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-178 ...

  4. 7-1 字母统计图 (10 分)(思路+详解)

    一:题目 摆放在面前的是一小段英文文章. afeng希望你能帮他统计一下每个小写字母出现的次数. 最后再以柱状图的形式(参照输出样例)输出出来. 输入格式: 输入第一行为一个正整数N(N<=10 ...

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

    一:题目 Come 宝 !!! 输入格式: 第一行符号个数n 输出格式: 符合要求的三角形个数 输入样例: 4 结尾无空行 输出样例: 6 二:思路 思路: 1.如果我们确立的第一行的符号是什么 ,那 ...

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

    一:题目 Come 宝宝!! 输出格式: 输出所有可行的方案数量 输入样例1: 3 50 50 10 40 40 结尾无空行 输出样例1: 4 结尾无空行 输入样例2: 3 50 50 20 40 4 ...

  7. 7-1 银行家算法--安全性检查 (20 分)(思路+详解+知识分析)宝 你今天 AC了吗

    一:前言 停更一周了,在这一周里,我每时每刻都在 想这我这 29个粉丝,庆幸教师资格证终于结束了,贴心杰又可以天天更新博客了 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,I am come back; 二: ...

  8. 7-3 最小生成树-kruskal (10 分)(思路+详解+并查集详解+段错误超时解决)宝 Come

    一:前言 本题需要用到并查集的知识,建议先学完并查集后再看看本题 二:题目 题目给出一个无向连通图,要求求出其最小生成树的权值. 温馨提示:本题请使用kruskal最小生成树算法. 输入格式: 第一行 ...

  9. 7-1 活动选择问题 (25 分)(思路+详解+扩展)宝 今天你AC了吗!!!

    一:题目 假定一个有n个活动(activity)的集合S={a 1 ​ ,a 2 ​ ,-,a n ​ },这些活动使用同一个资源(例如同一个阶梯教室),而这个资源在某个时刻只能供一个活动使用.每个活 ...

最新文章

  1. vmware workstation 下安装ubuntu
  2. SQLServer异常捕获
  3. idea 快速搭建spring boot 多模块项目(底部附源码)
  4. BC#29A:GTY's math problem(math) B:GTY's birthday gift(矩阵快速幂)
  5. [MySQL优化案例]系列 -- 用TIMESTAMP类型取代INT和DATETIME
  6. 没有双11的美团,被饿了么突袭“下沉粮仓”
  7. 百威中国签约第四范式 让夏日爽快人人尽享
  8. Oracle迁移数据库
  9. matlab填充点面,求大神指点绘制空间内散点图的包络面,,,散点程序如下
  10. 项目属性--生成事件--后期生成事件命令行
  11. 图像处理之简化色彩(含OpenCV代码)
  12. [C#参考]字符编码
  13. Spark Streaming 和 Flink 的对比以及详细描述,图文对比、代码
  14. 17. Gradle编译其他应用代码流程(五) - 设置Task过程
  15. 线程安全和线程不安全理解
  16. java 数组和集合的区别
  17. 管理员登陆页面php,Dedecms管理员登录输入账号密码点击登陆又回到登陆界面
  18. DDoS 报告攻击类型占比
  19. 自然语言处理 情绪识别
  20. 【bzoj3653】谈笑风生

热门文章

  1. Android实战:手把手实现“捧腹网”APP(二)-----捧腹APP原型设计、实现框架选取
  2. T-SQL编程基础之二:条件选择、循环编程
  3. Android之java.lang.UnsatisfiedLinkError(Failed to register native method ***callMethod1())解决办法
  4. LeetCode之Construct the Rectangle
  5. Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child
  6. mysql semi join_MySQL 5.6 Semi join优化之materialization strategy
  7. python代码加密解密_在python中加密 – 在Javascript中解密
  8. 每日一笑 | 3 X 4 = ?
  9. 每日一笑 | 程序员的日常,这也太真实了......
  10. 春节特惠活动┃给孩子讲100个科学道理,不如带他做这些趣味实验!