2n皇后的问题java_蓝桥杯java 基础练习 2n皇后问题
问题描述
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
输入格式
输入的第一行为一个整数n,表示棋盘的大小。
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。
输出格式
输出一个整数,表示总共有多少种放法。
样例输入
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
样例输出
2
样例输入
4
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
样例输出
0
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
static int n, m, map[][], Count;
static boolean v[][], a[][], b[][];
public static void main(String[] args) {
Scanner sc = new Scanner(new InputStreamReader(System.in));
while (sc.hasNext()) {
n = sc.nextInt();
map = new int[n][n];
v = new boolean[n][n];
a = new boolean[3][2 * n];
b = new boolean[3][2 * n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
map[i][j] = sc.nextInt();
Count = 0;
dfs(0);
System.out.println(Count);
}
}
private static void dfs(int i) {
if (i == n) {
Count++;
return;
}
for (int j = 0; j < n; j++) {
if (!v[i][j] && map[i][j] != 0) {
if (!a[0][i + j] && !a[1][n + i - j] && !a[2][j]) {
v[i][j] = true;
a[0][i + j] = a[1][n + i - j] = a[2][j] = true;
for (int k = 0; k < n; k++) {
if (!v[i][k] && map[i][k] != 0) {
if (!b[0][i + k] && !b[1][n + i - k] && !b[2][k]) {
v[i][k] = true;
b[0][i + k] = b[1][n + i - k] = b[2][k] = true;
dfs(i + 1);
v[i][k] = false;
b[0][i + k] = b[1][n + i - k] = b[2][k] = false;
}
}
}
v[i][j] = false;// 注意放置的位置
a[0][i + j] = a[1][n + i - j] = a[2][j] = false;
}
}
}
}
}
2n皇后的问题java_蓝桥杯java 基础练习 2n皇后问题相关推荐
- 蓝桥杯 Java 基础练习 vip试题
蓝桥杯 Java 基础练习 vip试题 高精度加法 其实这道题调用函数就会变得更简单 import java.math.BigDecimal; import java.util.Scanner; pu ...
- [Java] 蓝桥杯BASIC-27 基础练习 2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- 解题报告——蓝桥杯 试题 基础练习 2n皇后问题(附n皇后代码)
心路历程: 之前并没有系统的学过递归和搜索,在学这道题前先学习了深搜.递归,并敲掉了经典N皇后,因此理解起来难度也不是很大. 没有基础的同学一定要先把N皇后看会在碰这道题.下面会有N皇后逐步讲解的视频 ...
- 蓝桥杯 BASIC-27 基础练习 2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- 埃及分数怎么计算java_[蓝桥杯][java]埃及分数解法
import java.util.Scanner; /* * 标题:埃及分数 古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/ ...
- 蓝桥分酒java_[蓝桥杯][java]海盗分酒
/* * 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复...... * 直到开了第4瓶酒,坐着的 ...
- 01算法 java_蓝桥杯:基础练习 01字串【JAVA算法实现】
题目描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入 ...
- 蓝桥杯Java——基础练习VIP
目录 1.阶乘计算 2.高精度加法 3.Huffuman树 4.2n皇后问题 5.报时助手 6.回形取数 7.龟兔赛跑预测 8.芯片测试 9.FJ的字符串 10.Sine之舞 11.数的读法 12.完 ...
- 蓝桥杯java 基础练习 十六进制转十进制
问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...
最新文章
- cytoscape绘图互作网络图(二)
- mysql关联表插入-php环境中
- 字节一面,面试官拿 System.out.println() 考了我半个小时?我傻了
- GraphQL 到底有什么魔力?
- router vue 页签文字_vue-router实现tab标签页(单页面)详解
- HTML鼠标悬停显示隐藏div,javascript – 在鼠标悬停时显示/隐藏DIV
- E9启动后无法打印日志
- 属性匹配工具_k8s包管理工具Kustomize实战手册
- Monad B2 For Dotnet Framework 2.0 RC/RTM Released!
- 神经网络模型怎么建立,如何选择神经网络模型
- 大数据软件的国内镜像
- 3Dtouch开发内容
- 个人先进事迹如何写--注意三个关键词的把握
- 正则将长数字转为英式写法(从后向前3个数字一个逗号)
- 关于获取当前时间出现1970年问题的解决
- 淘宝排名查询接口,关键词排名api,淘宝商品排名查询api,淘宝关键词搜索查询接口
- android 固件管理器,刷机精灵(原Android固件管理器桌面版)
- wow服务器维护8月14,8月14日服务器例行维护公告(已完成)
- 学习笔记(1):EXCEL VBA编程进阶-2.6 工作表与工作簿结合应用(拆分工作表到工作簿)...
- 【提高组NOIP2017】小凯的疑惑(附证明)
热门文章
- 一点一点学写Makefile-1
- 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法
- lion.ec开源框架简介(原创)
- php开发环境配置 iis6+php-5.2.1-Win32+mysql-5.0.18-win32+phpMyAdmin-2.7.0-pl2快速安装
- mysql启动成功但是没有进程_zabbix_server表面启动成功,但是没有进程
- [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.解决办法
- Mac删除Windows10后空间丢失解决
- 单链表的逆置-C++实现(ok)
- ubuntu系统使用光盘/ISO镜像作为apt-get更新源
- linux学习笔记:更换国内网易163 yum 源