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

输入格式

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

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

输出格式

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

样例输入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

代码:

n皇后代码

#include <bits/stdc++.h>
using namespace std;
//   n皇后所有位置都可以放
//   带有不能安放位置的n皇后
int a[8][8];
int n;
int mark[8];
int cnt = 0;//计数
int judge(int row,int column)
{//判断列和斜角for(int i = 0; i < row;i++){if(/*判断列*/column == mark[i]||/*判断斜角*/abs(row-i)==abs(column-mark[i]))return 0;}return 1;
}
void Queue(int row)
{if(row == n)cnt++;//当找到一个解决方法时就增加else{for(int i = 0; i < n; i++){if(judge(row,i) )//&&a[row][i]/*可能是当前位置存在障碍不可以放*/  /*这个就是判断当前位置能否放置{ //location数组标记每一列 mark[row] = i;//第row行的第i个放置皇后Queue(row+1);//每一行row在变化不存在每一行有多个皇后 故而只用判断斜角和列}}}
}
int main()
{memset(mark,0,sizeof mark);scanf("%d",&n);//如果输入的带有不能安放皇后的棋盘//输入时   0代表不能安放  1代表可以安放for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)scanf("%d",&a[i][j]);Queue(0);cout<<cnt<<endl;return 0;
}

本题目解决代码:

#include <bits/stdc++.h>
using namespace std;
int a[8][8];
int n;
int markblack[8];
int markwrite[8];
int cnt = 0;//计数
int judgeblack(int row,int column)
{for(int i = 0; i < row; i++){if(column == markblack[i]||abs(row-i) == abs(column-markblack[i]))return 0;}return 1;
}
int judgewrite(int row,int column)
{for(int i = 0; i < row; i++){if(column == markwrite[i]||abs(row-i) == abs(column-markwrite[i]))return 0;}return 1;
}
int Queue(int row_black,int row_write)
{if(row_black == n){//再来搜索白皇后 if(row_write == n)cnt++;else{for(int i = 0; i < n; i++){if(a[row_write][i]&&judgewrite(row_write,i)){markwrite[row_write] = i;Queue(row_black,row_write+1);}}}}else{for(int i = 0; i < n; i++){if(a[row_black][i]&&judgeblack(row_black,i)){markblack[row_black] = i;a[row_black][i] = 0; //存放黑皇后 后不能再存放白皇后 故令其为0Queue(row_black+1,row_write);a[row_black][i] = 1; //对应}}}
}
int main()
{scanf("%d",&n);//如果输入的带有不能安放皇后的棋盘for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)scanf("%d",&a[i][j]);Queue(0,0);cout<<cnt<<endl;return 0;
} 

八皇后-n皇后-2n皇后相关推荐

  1. 蓝桥杯 八皇后 2n皇后问题

    八皇后问题 正式讲解2n皇后问题之前,首先聊聊八皇后问题 题目很简单,8*8棋盘上放上八个皇后,不能放在同一行.列,或者是同对角线. 我在做这题的时候,首先没有参考别人的思路.第一反应是DFS来解决, ...

  2. python【蓝桥杯vip练习题库】BASIC-27 2n皇后问题(八皇后问题 搜索)

    试题 基础练习 2n皇后问题 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个 ...

  3. 蓝桥杯 基础练习 2n皇后

    目   录 题目描述 题解 [算法]八皇后,蓝桥杯2n皇后 算法思路详细讲解(Java) 题目描述 题目描述 给定一个 n × n 的棋盘,棋盘中有一些位置不能放皇后. 现在要向棋盘中放入 n 个黑皇 ...

  4. 皇后问题,8皇后、n皇后、2n皇后

    8皇后问题 问题描述: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例. 该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出: 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意 ...

  5. 蓝桥杯每日积累-打破算法壁垒,攻略2n皇后问题

    题前感言 2n皇后问题讲的是黑皇后和白皇后间相爱相杀的故事,相同颜色的皇后只要站在互相看得到的地方便会自相残杀,这怎么能行?多好的妹子,我们要做的事情就是阻止她们互相残杀! 算法准备 看到题我很兴奋, ...

  6. 2n皇后 - 回溯

    题目地址:http://www.51cpc.com/web/problem.php?id=1172 Summarize: 1. 递归回溯: 2. 先扫完一种皇后,再扫描另一种: 3. 循环输入: 4. ...

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

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

  8. 蓝桥杯算法提高----2n皇后

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

  9. 2n皇后问题(dfs)

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

  10. 蓝桥杯 基础练习 2n皇后问题(从n皇后问题入手)

    n皇后问题是一个以国际象棋为背景的问题:在n×n的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行.纵行或斜线上. 利用递归和回溯算法轻松解决 ...

最新文章

  1. android ble5.0添加扫描过滤,bluetooth-lowenergy
  2. MyBatis入门及CRUD
  3. 牛客网 短最优升级路径 【Dijkstra算法】+【路径记录】
  4. 『设计模式』写代码偷懒小技巧,程序开发大智慧--享元模式
  5. 【Elasticsearch】Elasticsearch gateway 流程分析
  6. 回归模型分类(自回归AR模型、向量自回归VAR模型等)
  7. mengento 数据库模型
  8. IntelliJ 通过 Cloud Toolkit 登陆远程服务器终端 Terminal
  9. c#正则表达式应用实例
  10. 数据增强在贝壳找房文本分类中的应用
  11. gradle 关于repository配置
  12. Navicat for mysql破解版安装步骤
  13. cdh安装hadoop组件后一些常用设置
  14. Setup Factory 提示 Invalid start mode : archive filename 的解决办法
  15. 怎样检测php语法错误,检查php的语法错误
  16. JavaScript实现DoublyLinkedList双链表的算法(附完整源码)
  17. 2019杭电多校6,E.Snowy Smile(线段树维护子段和)
  18. 昆仑通态触摸屏保存历史曲线_mcgs历史数据保存到U盘
  19. k8s集群ClusterIP不能使用
  20. 用malloc开辟二维数组的三种办法

热门文章

  1. AndroidStudio中虚拟机的联网问题
  2. C语言-文件读写操作
  3. (设计模式)Adaptor、Decorator与Facade模式
  4. windows查看php的端口,WINDOWS下常用的服务以及对应的端口 - Windows操作系
  5. 科普贴:远程开户,有哪些离岸银行可以选?
  6. js 鼠标拖拽改变div宽度高度
  7. 双向长短期记忆网络模型_一种基于双向长短期记忆网络的定位修正方法与流程...
  8. 【c语言】求一个3行4列矩阵的外框的元素值之和
  9. JVM-SandBox使用入门
  10. ovs 支持的full offload action