问题描述

给定一个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皇后问题相关推荐

  1. 蓝桥杯 Java 基础练习 vip试题

    蓝桥杯 Java 基础练习 vip试题 高精度加法 其实这道题调用函数就会变得更简单 import java.math.BigDecimal; import java.util.Scanner; pu ...

  2. [Java] 蓝桥杯BASIC-27 基础练习 2n皇后问题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...

  3. 解题报告——蓝桥杯 试题 基础练习 2n皇后问题(附n皇后代码)

    心路历程: 之前并没有系统的学过递归和搜索,在学这道题前先学习了深搜.递归,并敲掉了经典N皇后,因此理解起来难度也不是很大. 没有基础的同学一定要先把N皇后看会在碰这道题.下面会有N皇后逐步讲解的视频 ...

  4. 蓝桥杯 BASIC-27 基础练习 2n皇后问题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...

  5. 埃及分数怎么计算java_[蓝桥杯][java]埃及分数解法

    import java.util.Scanner; /*  *  标题:埃及分数     古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/ ...

  6. 蓝桥分酒java_[蓝桥杯][java]海盗分酒

    /*  * 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复......   * 直到开了第4瓶酒,坐着的 ...

  7. 01算法 java_蓝桥杯:基础练习 01字串【JAVA算法实现】

    题目描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入 ...

  8. 蓝桥杯Java——基础练习VIP

    目录 1.阶乘计算 2.高精度加法 3.Huffuman树 4.2n皇后问题 5.报时助手 6.回形取数 7.龟兔赛跑预测 8.芯片测试 9.FJ的字符串 10.Sine之舞 11.数的读法 12.完 ...

  9. 蓝桥杯java 基础练习 十六进制转十进制

    问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...

最新文章

  1. cytoscape绘图互作网络图(二)
  2. mysql关联表插入-php环境中
  3. 字节一面,面试官拿 System.out.println() 考了我半个小时?我傻了
  4. GraphQL 到底有什么魔力?
  5. router vue 页签文字_vue-router实现tab标签页(单页面)详解
  6. HTML鼠标悬停显示隐藏div,javascript – 在鼠标悬停时显示/隐藏DIV
  7. E9启动后无法打印日志
  8. 属性匹配工具_k8s包管理工具Kustomize实战手册
  9. Monad B2 For Dotnet Framework 2.0 RC/RTM Released!
  10. 神经网络模型怎么建立,如何选择神经网络模型
  11. 大数据软件的国内镜像
  12. 3Dtouch开发内容
  13. 个人先进事迹如何写--注意三个关键词的把握
  14. 正则将长数字转为英式写法(从后向前3个数字一个逗号)
  15. 关于获取当前时间出现1970年问题的解决
  16. 淘宝排名查询接口,关键词排名api,淘宝商品排名查询api,淘宝关键词搜索查询接口
  17. android 固件管理器,刷机精灵(原Android固件管理器桌面版)
  18. wow服务器维护8月14,8月14日服务器例行维护公告(已完成)
  19. 学习笔记(1):EXCEL VBA编程进阶-2.6 工作表与工作簿结合应用(拆分工作表到工作簿)...
  20. 【提高组NOIP2017】小凯的疑惑(附证明)

热门文章

  1. 一点一点学写Makefile-1
  2. 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法
  3. lion.ec开源框架简介(原创)
  4. php开发环境配置 iis6+php-5.2.1-Win32+mysql-5.0.18-win32+phpMyAdmin-2.7.0-pl2快速安装
  5. mysql启动成功但是没有进程_zabbix_server表面启动成功,但是没有进程
  6. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.解决办法
  7. Mac删除Windows10后空间丢失解决
  8. 单链表的逆置-C++实现(ok)
  9. ubuntu系统使用光盘/ISO镜像作为apt-get更新源
  10. linux学习笔记:更换国内网易163 yum 源