文章目录

  • 前言
  • 一、题目描述
    • 输入描述
    • 输出描述
    • 输入输出样例
      • 示例 1
    • 运行限制
  • 二、思路
  • 三、具体代码

前言

蓝桥杯2021年模拟赛,编程题(C++)

N皇后问题是非常经典的问题,也是考察的重点

一、题目描述

有一个 n×n 的国际象棋棋盘(n 行 n 列的方格图),请在棋盘中摆放 n 个受伤的国际象棋皇后,要求:

  1. 任何两个皇后不在同一行。
  2. 任何两个皇后不在同一列。
  3. 如果两个皇后在同一条 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模拟赛“受伤的皇后”相关推荐

  1. c++判断奇偶_第十一届(今年)蓝桥杯省模拟赛 试题+源码 C/C++详解

    后台回复开发工具,免费获取C语言常用编译器 本文章来源:CSDN|亓官劼 本文是第十一届蓝桥杯省模拟赛的试题和部分题解,博主参加的是4.13日的下午场,也就是本次模拟赛的第一天了吧,不知道有没有上午场 ...

  2. Java 第十一届 蓝桥杯 省模拟赛 小明的城堡

    小明用积木搭了一个城堡. 为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个 n 行 m 列的方格图上,每个积木正好占据方格图的一个小方格. 当然,小明的城堡并不是平面的,而是立体的.小明 ...

  3. 蓝桥杯校内模拟赛_C++组

    蓝桥杯校内模拟赛 填空题 填空题比较简单,只需要在空格中填写整数答案即可: 在计算机存储中,15.125GB是多少MB? 解题思路: 1GB=1024MB,打开系统计算器计算即可 答案: 15488 ...

  4. 2020年蓝桥杯省模拟赛

    2020年4月18日蓝桥杯省模拟赛 第一题: 问题描述: 由1对括号,可以组成一种合法括号序列:(). 由2对括号,可以组成两种合法括号序列:()().(()). 由4对括号组成的合法括号序列一共有多 ...

  5. 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)

    刚刚结束第十四届蓝桥杯校内模拟赛第二期,在这记录下自己的代码 不保证正确! 不保证正确! 不保证正确! 有问题一起改正!! 题解 2048 代码: package _14届模拟2;public cla ...

  6. 第十四届蓝桥杯校内模拟赛第一期——Python

    第十四届蓝桥杯校内模拟赛第一期--Python 文章目录 第十四届蓝桥杯校内模拟赛第一期--Python 1.二进制位数 问题描述 参考答案 扩展 2. 晨跑 问题描述 参考答案 扩展 3. 调和级数 ...

  7. Java 第十一届 蓝桥杯 省模拟赛 递增序列

    问题描述 在数列 a[1], a[2], -, a[n] 中,如果 a[i] < a[i+1] < a[i+2] < - < a[j],则称 a[i] 至 a[j] 为一段递增 ...

  8. Java 第十一届 蓝桥杯 省模拟赛 梅花桩

    小明每天都要练功,练功中的重要一项是梅花桩. 小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1. 小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上.小 ...

  9. Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制

    问题描述 请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制. 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这 ...

最新文章

  1. 售前工程师的成长(五)---一个老员工的经验之谈
  2. Android高通平台调试Camera驱动全纪录
  3. java 网络编程 博客园_java网络编程
  4. OCP笔记部分整理-学习参考
  5. vue.js单文件组件中非父子组件的传值
  6. jquery.uploadify参数
  7. 计算机网络项目——最小网元设计(前情提要和项目概述)
  8. 【LeetCode】【数组】题号:59,螺旋数组2
  9. 软件测试——测试用例设计测试分类详解
  10. 微信公众号开发获取openid
  11. 机器之心深度研学社每周干货:2017年第13周
  12. Linux选择填空练习题
  13. 先正达谋定农化世界竞争格局-丰收节贸易会:座次重排
  14. Qua Vadis Eclipse? 第二部分
  15. 快排(基础详解入门)
  16. java闪光灯手电筒_Android_Android 开启闪光灯做手电筒的详解,复制代码 代码如下:public class H - phpStudy...
  17. hao123首页源码 html,html css应用高仿hao123网站
  18. eclipes Java代码连接Mysql数据库
  19. adobe flash media service5简单使用
  20. 文件夹里的文件怎么批量打印呢?

热门文章

  1. 7-3 迷宫寻宝 (20 分)
  2. Java毕业设计_基于智能判分的英语在线考试系统
  3. python开发小型数据库_Python后台开发Django(数据库)
  4. Flaky Tests 不可靠的测试
  5. 以楼聚产、以商招商 刘亦锦推进华锦铭盛大厦楼宇经济
  6. 在难熬的时刻也将过去
  7. “真希望我第一次创业时就知道的事”
  8. 关于Qrcode的学习
  9. 微信小程序固定顶部和底部
  10. 高频电压信号注入算法搬运