算法练习题40---蓝桥杯2021模拟赛“受伤的皇后”
文章目录
- 前言
- 一、题目描述
- 输入描述
- 输出描述
- 输入输出样例
- 示例 1
- 运行限制
- 二、思路
- 三、具体代码
前言
蓝桥杯2021年模拟赛,编程题(C++)
N皇后问题是非常经典的问题,也是考察的重点
一、题目描述
有一个 n×n 的国际象棋棋盘(n 行 n 列的方格图),请在棋盘中摆放 n 个受伤的国际象棋皇后,要求:
- 任何两个皇后不在同一行。
- 任何两个皇后不在同一列。
- 如果两个皇后在同一条 45 度角的斜线上,这两个皇后之间行号的差值至少为 3 。
请问一共有多少种摆放方案。
输入描述
输入的第一行包含一个整数 n。
其中,1≤n≤10。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
4
输出
2
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
二、思路
这个题目与以往的N皇后题目有一个细微的差别,经典的N皇后问题是皇后不能放置在45度的斜线上,而本题目允许行数大于等于3的皇后放到45度的斜线上。
数据结构上,尝试用col[i]=j 这个数组表示在第i行第j列放有棋子,比二维数组更节约空间。
算法上,DFS(int r)表示当前遍历的行数为r,也就是当前行判断该列是否能放,能放就递归调用DFS(r+1),另外一个非常重要的check(int c,int r) 函数,用来检测当前第r行第c列如果放置棋子是否冲突,冲突判断的条件是行不能重复,列不能重复,同时对角线不能重复,也就是
abs(i-r)!=abs(c-col[i])&&abs(i-r)>=3 //其中i是循环遍历行的参数
三、具体代码
#include<bits/stdc++.h>
using namespace std;
int col[15]={0}; //存储第i行的列信息
int tot=0;
int n;
//int ans[15]={0};
bool check(int c,int r)
{for(int i=0;i<r;i++) //遍历行{if(col[i]==c) //代表前面的行已经在该列存放{return false;}else if(abs(i-r)==abs(col[i]-c)&&abs(i-r)<3) //放到了对角线上,非法{return false;}}return true;
}
void dfs(int r)
{if(r==n){tot++;return;}for(int i=0;i<n;i++){if(check(i,r)){col[r]=i;dfs(r+1);}}
}
int main()
{cin>>n;dfs(0);cout<<tot<<endl;return 0;
}
算法练习题40---蓝桥杯2021模拟赛“受伤的皇后”相关推荐
- c++判断奇偶_第十一届(今年)蓝桥杯省模拟赛 试题+源码 C/C++详解
后台回复开发工具,免费获取C语言常用编译器 本文章来源:CSDN|亓官劼 本文是第十一届蓝桥杯省模拟赛的试题和部分题解,博主参加的是4.13日的下午场,也就是本次模拟赛的第一天了吧,不知道有没有上午场 ...
- Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
小明用积木搭了一个城堡. 为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个 n 行 m 列的方格图上,每个积木正好占据方格图的一个小方格. 当然,小明的城堡并不是平面的,而是立体的.小明 ...
- 蓝桥杯校内模拟赛_C++组
蓝桥杯校内模拟赛 填空题 填空题比较简单,只需要在空格中填写整数答案即可: 在计算机存储中,15.125GB是多少MB? 解题思路: 1GB=1024MB,打开系统计算器计算即可 答案: 15488 ...
- 2020年蓝桥杯省模拟赛
2020年4月18日蓝桥杯省模拟赛 第一题: 问题描述: 由1对括号,可以组成一种合法括号序列:(). 由2对括号,可以组成两种合法括号序列:()().(()). 由4对括号组成的合法括号序列一共有多 ...
- 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)
刚刚结束第十四届蓝桥杯校内模拟赛第二期,在这记录下自己的代码 不保证正确! 不保证正确! 不保证正确! 有问题一起改正!! 题解 2048 代码: package _14届模拟2;public cla ...
- 第十四届蓝桥杯校内模拟赛第一期——Python
第十四届蓝桥杯校内模拟赛第一期--Python 文章目录 第十四届蓝桥杯校内模拟赛第一期--Python 1.二进制位数 问题描述 参考答案 扩展 2. 晨跑 问题描述 参考答案 扩展 3. 调和级数 ...
- Java 第十一届 蓝桥杯 省模拟赛 递增序列
问题描述 在数列 a[1], a[2], -, a[n] 中,如果 a[i] < a[i+1] < a[i+2] < - < a[j],则称 a[i] 至 a[j] 为一段递增 ...
- Java 第十一届 蓝桥杯 省模拟赛 梅花桩
小明每天都要练功,练功中的重要一项是梅花桩. 小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1. 小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上.小 ...
- Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制
问题描述 请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制. 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这 ...
最新文章
- 售前工程师的成长(五)---一个老员工的经验之谈
- Android高通平台调试Camera驱动全纪录
- java 网络编程 博客园_java网络编程
- OCP笔记部分整理-学习参考
- vue.js单文件组件中非父子组件的传值
- jquery.uploadify参数
- 计算机网络项目——最小网元设计(前情提要和项目概述)
- 【LeetCode】【数组】题号:59,螺旋数组2
- 软件测试——测试用例设计测试分类详解
- 微信公众号开发获取openid
- 机器之心深度研学社每周干货:2017年第13周
- Linux选择填空练习题
- 先正达谋定农化世界竞争格局-丰收节贸易会:座次重排
- Qua Vadis Eclipse? 第二部分
- 快排(基础详解入门)
- java闪光灯手电筒_Android_Android 开启闪光灯做手电筒的详解,复制代码 代码如下:public class H - phpStudy...
- hao123首页源码 html,html css应用高仿hao123网站
- eclipes Java代码连接Mysql数据库
- adobe flash media service5简单使用
- 文件夹里的文件怎么批量打印呢?