【2022刷题】受伤的皇后
题目描述
有一个n×n 的国际象棋棋盘(n 行 n 列的方格图),请在棋盘中摆放 n 个受伤的国际象棋皇后,要求:
- 任何两个皇后不在同一行。
- 任何两个皇后不在同一列。
- 如果两个皇后在同一条 45 度角的斜线上,这两个皇后之间行号的差值至少为 3 。
请问一共有多少种摆放方案。
输入描述
输入的第一行包含一个整数 n。
其中,1≤n≤10。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
4
输出
2
运行限制
最大运行时间:1s
最大运行内存: 128M
解题思路
在n阶矩阵中放入n个皇后,那么每列或每行肯定会有一个,令第一颗棋子在第一行,只需要遍历完第一颗棋子的可能情况即可得到结果。
利用深度优先搜索,dfs(k)表示搜索到深度为k的情况。
代码部分
import java.util.*;
import java.io.*;public class Main {static int g[][] = new int[11][11];//棋盘static int ans = 0;//记录答案static int n;//记录要放多少棋子static int cnt= 0;//记录放置棋子个数public static void main(String[] args) throws IOException {//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));Scanner scan = new Scanner(System.in);n = scan.nextInt();for(int i = 1;i<=n;i++) {for(int j = 1;j<=n;j++) {//初始化Arrays.fill(g[j], 0);}g[1][i] = 1;cnt=1;dfs(2);}System.out.println(ans);scan.close();//br.close();}static void dfs(int k) {if(k==n+1) {if(cnt==n) {//遍历到最后一层并且放下的棋子数满足要求即为一种结果ans++;}return ;}for(int i = 1;i<=n;i++) {if(isOk(k,i)) {//如果可以就放置g[k][i] = 1;cnt++;dfs(k+1);//回溯g[k][i] = 0;cnt--;}}return;}static boolean isOk(int x,int y) {//用来判断此处能否放棋子for(int i = 1;i<=n;i++) {if(g[x][i]==1) return false;}for(int i = 1;i<=n;i++) {if(g[i][y]==1) return false;}if(g[x][y]==1) return false;for(int i = 1;i<=n;i++) {int tx = x-i;int ty = y-i;if(tx>0&&ty>0) {if(g[tx][ty]==1&&Math.abs(tx-x)<3) return false;}else {break;}}for(int i = 1;i<=n;i++) {int tx = x-i;int ty = y+i;if(tx>0&&ty<=n) {if(g[tx][ty]==1&&Math.abs(tx-x)<3) return false;}else {break;}}for(int i = 1;i<=n;i++) {int tx = x+i;int ty = y-i;if(tx<=n&&ty>0) {if(g[tx][ty]==1&&Math.abs(tx-x)<3) return false;}else {break;}}for(int i = 1;i<=n;i++) {int tx = x+i;int ty = y+i;if(tx<=n&&ty<=n) {if(g[tx][ty]==1&&Math.abs(tx-x)<3) return false;}else {break;}}return true;}}
【2022刷题】受伤的皇后相关推荐
- 【2022刷题】心理阴影面积
这是一幅心理阴影面积图.我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线).由红.蓝线围出的面积,就是我们在做作业时的心理阴影面积. 现给出 ...
- 【2022刷题】天梯赛座位分配
引言 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 ...
- 2022/4/3刷题
2022/4/3刷题 Pascal's triangle(Turn 45 degrees counterclockwise) RESULT Output:Three numbers from big ...
- 力扣算法刷题Day30|回溯:重新安排行程 N皇后 解数独
力扣题目:#332.重新安排行程 刷题时长:参考题解 解题方法:回溯法 + 哈希表 复杂度分析 时间 空间 问题总结 无思路 本题收获 难点 避免死循环:去过的to机场及时删除 记录映射关系:哈希表, ...
- Python 刷题常用语法与数据结构汇总-2022.01.30
[笔试]python刷题笔记(基础)! https://blog.csdn.net/a_123456598/article/details/105420802 python语法刷题 https://b ...
- C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套
文章只能发选择题,刷大题去刷题软件效果会更好 刷题软件 gongzhonghao:露露IT 选择题 1.下面选项中不是关系数据库基本特征的是_______. A. 不同的列应有不同的列名 B. 不同的 ...
- 第十四届蓝桥杯三月真题刷题训练——第 22 天
目录 第 1 题:受伤的皇后_dfs 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 ...
- 【Leetcode】刷题题单记录
程序=算法+数据结构,不管干哪一行,只要涉及到编程算法始终是最重要的!!! 算法基础差,变做题巩固!!! LeetCode刷题,搞起来! 由于我只会C++和Python, 所以题解只有C++ 和 Py ...
- 洛谷、牛客网、AcWing 刷题(python版)
牛客网python专项练习整理(一) https://blog.csdn.net/weixin_41913008/article/details/87203468 牛客网剑指offer--python ...
- C#LeetCode刷题-程序员面试金典
本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...
最新文章
- WCF系列(一) -- 完全不使用配置文件构建和使用WCF服务
- 【特征工程】不容错过的 5 种特征选择的方法!
- rxjs pipe和map组合的一个实际例子的单步调试
- SSD( Single Shot MultiBox Detector)关键源码解析
- PWA将带来新一轮大前端技术洗牌?
- JavaScript 总结几个提高性能知识点(转)
- 33 SD配置-销售凭证设置-定义销售凭证的号码范围
- Spring Bean的生命周期例子
- matlab ssb,MatlabSSB信号的仿真分析.doc
- 百度启动“2021好运中国年” 22亿福利项目
- HSImageSidebarView
- Android通知频道,通知点
- 中国Linux源镜像站大全
- securityPolicy与安全策略等级配置
- Monkey命令相关总结
- 数据结构面试、数据结构考研复试——常见问题以及回答
- vue3 ts 手动封装message消息组件
- java 留言回复_Java实现评论回复功能的完整步骤
- 赛事相关 | 你好,微信大数据挑战赛,我是TI-ONE
- excel matlab日期,Excel日期格式在matlab中的转换