【问题描述】

给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。

【输入格式】

输入的第一行为一个整数n,表示棋盘的大小。

接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。

【输出格式】

输出一个整数,表示总共有多少种放法。

【样例输入1】

4

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

【样例输出1】

2

【样例输入2】

4

1 0 1 1

1 1 1 1

1 1 1 1

1 1 1 1

【样例输出2】

0

并没有完全按照题目上要求来,虽然有点长但是思路明白了就很简单,分享给大家!

import java.util.ArrayList;
import java.util.Scanner;/*0 1 2 02 0 0 11 0 0 20 2 1 0-------0 2 1 0 1 0 0 2 2 0 0 1 0 1 2 0*/
public class queen {public static void main(String[] args) {Scanner scanner =new Scanner(System.in);int num=scanner.nextInt();ArrayList<int[][]> arrayList=new ArrayList<>();int heinum=0;int bainum=0;int sum=0;int hei=0;int interval=0;int bai=1;while(hei<(num*num-1)) {heinum=0;bainum=0;int[][] arr=new int[num][num];for(int i=0;i<num;i++) {for(int j=0;j<num;j++) {if(hei/num==i && hei%num==j) {arr[i][j]=1;heinum++;}if(bai/num==i && bai%num==j) {arr[i][j]=2;bainum++;}}}for(int i=0;i<num;i++) {for(int j=0;j<num;j++) {if(arr[i][j]==0) {if(hang(arr,i,j, 1)) {arr[i][j]=1;heinum++;}}}}for(int i=0;i<num;i++) {for(int j=0;j<num;j++) {if(arr[i][j]==0) {if(hang(arr,i,j, 2)) {arr[i][j]=2;bainum++;}}}}if(heinum==num && bainum==num) {boolean boo=true;for(int i=0;i<arrayList.size();i++){boo=true;for(int j=0;j<arr.length;j++){for(int k=0;k<arr.length;k++){if (arrayList.get(i)[j][k]!=arr[j][k]){boo=false;j=arr.length;k=arr.length;}}}if (boo==true){i=arrayList.size();}}if (boo==false){for(int i=0;i<num;i++) {for(int j=0;j<num;j++) {System.out.print(arr[i][j]);System.out.print(" ");}System.out.println();}System.out.println("-------");arrayList.add(arr);sum++;}if (sum==0){for(int i=0;i<num;i++) {for(int j=0;j<num;j++) {System.out.print(arr[i][j]);System.out.print(" ");}System.out.println();}System.out.println("-------");arrayList.add(arr);sum++;}}interval++;bai=bai+1;if(bai==num*num) {hei++;interval=0;bai=hei+1;}}System.out.println(sum);}public static boolean hang(int[][] arr,int a,int b,int value) {boolean hang=true;for(int i=0;i<arr.length;i++) {if(arr[a][i]==value) {hang=false;}if(arr[i][b]==value) {hang=false;}}int min=a;if(a>b) {int a2=a-b;int b2=0;min=b;while(a2!=arr.length && b2!=arr.length) {if(arr[a2][b2]==value) {hang=false;}a2++;b2++;}}else if(a<b) {int a2=0;int b2=b-a;while(a2!=arr.length && b2!=arr.length) {if(arr[a2][b2]==value) {hang=false;}a2++;b2++;}}else if(a==b) {int a2=0;int b2=0;while(a2!=arr.length && b2!=arr.length) {if(arr[a2][b2]==value) {hang=false;}a2++;b2++;}}if(a+b<3) {int a3=a+b;int b3=0;while(a3!=-1 && b3!=arr.length) {if(arr[a3][b3]==value) {hang=false;}a3=a3-1;b3=b3+1;}}else if(a+b>3) {int a3=arr.length-1;int b3=(a+b)%(arr.length-1);while(a3!=-1 && b3!=arr.length) {if(arr[a3][b3]==value) {hang=false;}a3=a3-1;b3=b3+1;}}else if((a+b)==3) {int a3=arr.length-1;int b3=0;while(a3!=-1 && b3!=arr.length) {if(arr[a3][b3]==value) {hang=false;}a3=a3-1;b3=b3+1;}}return hang;}
}

(Java蓝桥杯算法)现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。相关推荐

  1. JAVA 蓝桥杯 算法提高 色盲的民主

    JAVA 蓝桥杯 算法提高 色盲的民主 资源限制 时间限制:1.0s 内存限制:256.0MB  色盲的民主 问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自 ...

  2. JAVA 蓝桥杯 算法提高 阮小二买彩票

    JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...

  3. java 蓝桥杯算法训练 4-1打印下述图形(题解)

    试题 算法训练 4-1打印下述图形 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 使用循环结构打印下述图形,打印行数n由用户输入.打印空格时使用"%s"格式,向 ...

  4. java 蓝桥杯算法训练 整除问题(题解)

    试题 算法训练 整除问题 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,输入三个正整数min.max和factor,然后对于min到max之间的每一个整数(包括min ...

  5. java 蓝桥杯算法训练 寂寞的数(题解)

    试题 算法训练 寂寞的数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 道德经曰:一生二,二生三,三生万物. 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和. ...

  6. java 蓝桥杯算法训练 未名湖边的烦恼

    试题 算法训练 未名湖边的烦恼 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一 ...

  7. java 蓝桥杯算法提高 字符串匹配(题解)

    试题 算法提高 字符串匹配 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时 ...

  8. java 蓝桥杯算法提高 9-2 文本加密

    试题 算法提高 9-2 文本加密 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 先编写函数EncryptChar,按照下述规则将给定的字符c转化(加密)为新的字符:"A& ...

  9. java 蓝桥杯算法训练 奇变的字符串(题解)

    试题 算法训练 奇变的字符串 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 将一个字符串的奇数位(首位为第0位)取出,将其顺序弄反,再放回原字符串的原位置上. 如字符串" ...

最新文章

  1. 坦克世界服务器未响应怎么解决,华硕笔记本老是程序未响应怎么处理
  2. labVIEW与单片机实现串口通信的设计过程
  3. TensorFlow学习笔记(一):数据操作指南
  4. intellij idea建立maven项目
  5. java lambda 局部变量_java Lambda表达式访问局部变量详细介绍
  6. google的api key调用次数是多少_Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?...
  7. 浙江省高等学校计算机等级考试有什么用,06秋年秋浙江省高等学校计算机等级考试试卷(三级数据库技术及应用)...
  8. 创建新DB和新用户DBeaver连接
  9. python给多个子图加总标题
  10. 人事档案管理系统介绍(二)
  11. ACID, BASE和CAP
  12. 通达信手机版服务器文件夹,【通达信】通达信的一些目录和系统文件,用法说明。以备查询。...
  13. QT语言版本支持---国际化语言家功能的使用
  14. 传智播客大型人才招聘会成功举行
  15. 希腊字母表 ← LaTeX
  16. 机器学习从入门到创业手记-初识sklearn
  17. 嵌入式编程中volatile的重要性
  18. flatten(扁平化)数组
  19. 实用:常用PPT国内外不错的网站介绍
  20. Java(JNI)Android使用JNI开发

热门文章

  1. NBA 词汇 中英对照
  2. mac pbcopy和pbpaste使用
  3. 二维列表排序 python_python教程:[74]列表排序
  4. python如何完成列表的排序_Python要如何实现列表排序的几种方法
  5. 雨后,大觉寺+鹫峰,玩一圈。
  6. 【面试题】Vue2为什么能通过this访问到data、methods的属性或方法
  7. 流利阅读 2019.1.25 Saudi thirst for water is creating a toxic brine problem
  8. 视频号如何快速引流精准客源;教你日引500+精准用户。
  9. openwrt路由器系统安装神卓互联的ipk
  10. 荔枝派Zero(V3s)SPI Flash 启动