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

解题思路:

在n皇后的基础之上,当把其中一个颜色的皇后全部归位后进行另一颜色皇后的归位,直到这两种皇后全归位后算是一种方式,然后进行递归回溯。

程序代码:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>int a[10][10],x[10],y[10];
int n,sum;
void dfs(int r);
void dfs1(int r);
int Place(int r,int t);
int Place1(int r,int t);int main()
{int i,j;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);sum=0;dfs(0);printf("%d\n",sum);return 0;
}
void dfs(int r)
{int i;if(r==n){dfs1(0);return;}for(i=0;i<n;i++){x[r]=i;if(a[r][i]==1&&Place(r,i)==1){a[r][i]=0;dfs(r+1);a[r][i]=1;}}
}
int Place(int r,int t)
{int i;for(i=0;i<r;i++)if(x[i]==t||r-i==abs(x[r]-x[i]))return 0;return 1;
}void dfs1(int r)
{int i;if(r==n){sum++;return;}for(i=0;i<n;i++){y[r]=i;if(a[r][i]==1&&Place1(r,i)==1){a[r][i]=0;dfs1(r+1);a[r][i]=1;}}
}int Place1(int r,int t)
{int i;for(i=0;i<r;i++)if(y[i]==t||r-i==abs(y[r]-y[i]))return 0;return 1;
}

2n皇后问题(dfs)相关推荐

  1. 2n皇后问题 dfs

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

  2. 专题·深度优先搜索(DFS)【including 2N皇后,等边三角形,中国邮递员问题

    初见安~这篇我们来讲讲深搜(DFS) 前文我们讲过了递归[这里是递推递归],这里我们就要运用到啦~ 所谓深搜,也顾名思义就是在深度上搜索,到了尽头则返回上一层,换一条路继续搜--也就是递归思想. 先看 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. 问题 1460: [蓝桥杯]黑白2n皇后问题

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

最新文章

  1. WSL与Windows交互实践
  2. JS打印页面指定区域
  3. uvalive4836(枚举)
  4. 姜黄的毒副作用调研汇总(调研手稿一)
  5. Spark精华问答 | Spark 会替代Hadoop 吗?
  6. linux 星号 通配符,如何在bash中转义通配符/星号字符?
  7. 应用发布前,需要注意事情
  8. 剑指offer——圆圈中最后剩下的数字
  9. 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件...
  10. 「动手学深度学习」在B站火到没谁,加这个免费实操平台,妥妥天花板
  11. 软件过程改进的实施建议
  12. 封装SIP和SOIC有什么区别
  13. python 控制 窗口 控件_【python】Tkinter可视化窗口(一)
  14. 宝宝专业智力测试软件,宝宝智力测试 App—儿童智力测试
  15. yigo基础学习笔记3_数据迁移
  16. 河北省会计证年检流程
  17. pdcp层的作用_LTE协议栈总体架构、PDCP层及RLC层概述
  18. 校园广播系统应用案例-柴达木职业技术学院
  19. word毕业论文题注自动编号设置——第一章与图1-1
  20. 控制不变量下的PLC入侵检测系统

热门文章

  1. 关于Javascript闭包的理解(二)
  2. 对VLAN间路由实验的总结
  3. centOS7.6安装MySQL8
  4. ubuntu-18.04 设置开机启动脚本-亲测有效
  5. websocket handshake unexpected response code 404问题
  6. 杨辉三角形函数 JavaScript Generator 实现
  7. 独立博客网站FansUnion.cn运营2年的经验和教训以及未来规划
  8. 挣脱浏览器的束缚(5) - 哭笑不得的IE Bug
  9. MySQL索引、事物
  10. lucene的Query类型