基础练习 2n皇后问题

时间限制:1.0s 内存限制:512.0MB

问题描述

  给定一个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

package 蓝桥杯VIP;

import java.util.Scanner;

public class 皇后问题 {
static int sum=0;//统计符合的数目
public static void main(String[] args)
{
Scanner db=new Scanner (System.in);
int n=db.nextInt();
int arr[]=new int [n]; //皇后放置位置
int wee[][]=new int [n][n];// 接受输入时的0 1
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
wee[i][j]=db.nextInt();
queen(0, 0, arr, wee);//递归调用
System.out.println(sum);
}
public static int queen(int su, int k, int arr[], int[][] wee)
//su==0表示落子的是白皇后 为1 表示落子的是黑皇后 k表示第k个皇后
{
if(k==arr.length)//如果所有皇后都放置
{
if(su==0)//判断放置的是否是白皇后
{
arr=new int[arr.length]; //如果白皇后都被放置,初始化黑皇后的位置
queen(su+1, 0, arr, wee);
}
if(su==1)//判断放置的是否是白皇后
sum++; //统计2n皇后的放置种数
return sum;
}
for(int i=0; i<arr.length; i++)//判断第k个皇后位置(列数)行数为k
{
if(wee[k][i]==0) //如果当前位置坐标值为零,则不能放置皇后
continue;
int j;
for(j=0; j<k; j++)//前k-1个皇后位置(列数)行数 为j
if(arr[j]==i||Math.abs(arr[j]-i)==(k-j))//判断皇后之间是否存在同一列,统一对角线冲突
break;
if(j==k)//条件成立时表示第k个与之前的没有冲突
{
arr[k]=i; //第k个皇后位置
wee[k][i]=0; //将此位置即为0 表示不能再这放置皇后
queen(su, k+1, arr, wee); //递归调用下一层
wee[k][i]=1;
}
}
return sum;
} }

原文:https://blog.csdn.net/qiaosheng1010/article/details/79678064

最新文章

  1. Effective Objective-C 2.0 — 第五条用枚举表示状态、选项、状态码 (未看完)
  2. 从零开始学Linux[二]:常用操作:用户组、进程、网络、ssh
  3. Spring异常累计(1)Spring注解与扫描,NoUniqueBeanDefinitionException
  4. exe转msi
  5. Python学习之静态页面数据抓取
  6. web服务器【apache/nginx] 关闭目录的浏览权限
  7. spring autoWire注解和@resource注解区别
  8. 征服 Redis
  9. python dgango简介 安装 多表查询
  10. MyBatis映射文件3(参数处理Map)
  11. Hadoop生态圈-单点登录框架之CAS(Central Authentication Service)部署
  12. 移动端根元素(html)的设置
  13. centos下nginx的启动
  14. loj#6062. 「2017 山东一轮集训 Day2」Pair hall定理+线段树
  15. Mathematics | Mean, Variance and Standard Deviation
  16. 鼠标悬浮控制元素隐藏与显示 - css中鼠标的hover状态
  17. Jq_select的操作
  18. I.MX6 Linux U-boot 环境变量解析
  19. [翻译] HTKDynamicResizingCell
  20. PHP面向对象之接口

热门文章

  1. ABAP 内表与XML转换
  2. Linux文件系统基本结构
  3. HMM-前向后向算法理解与实现(python)
  4. js es6深入应用系列(Generator)
  5. 工作总结1-----String.format的使用
  6. 格式转换工具:使用kgEncode转换压缩无损音乐
  7. python mysql数据库基本操作方法
  8. python常识系列08--&gt;logging模块基础入门
  9. 笨办法学习python之hashmap
  10. 【雕爷学编程】Arduino动手做(43)---单路继电器模块