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. 控制显示隐藏_大众发动机控制单元隐藏功能刷写
  2. TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP 报文段中的数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。...
  3. mongo mysql 条件查询效率_mongodb查询条件对查询效率的影响
  4. sklearn 岭回归
  5. 计算机社团活动教学计划,社团活动教学计划(计算机平面设计).doc
  6. 处理字符串_3_处理含引号的字符串
  7. 副本放置策略Copysets论文解读及工程实践
  8. python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值...
  9. Wannafly挑战赛23 A 字符串
  10. Homebrew更换源
  11. 分别求两个整数的最大公约数和最小公倍数。_看不懂辗转相除法求最小公约数?以身相许那种哦!...
  12. 使textarea支持tab缩进
  13. php magento 开发,magento 2模块开发实例helloworld模块 hello world 程序 c语言hello world代码 c语言hello worl...
  14. mysql安全模式什么意思_mysql安全模式指的是什么意思
  15. MySQL-第四篇索引
  16. 双栏显示的时候三线格的线太长怎么办?
  17. 不使用imrotate实现图像旋转(点操作实现)
  18. python爬虫-字体反爬全流程(woft文件-转换字体-字体图片-图片识别全流程)
  19. 微信小程序真机预览图片图标无法显示
  20. ProFTPD部署教程

热门文章

  1. C# 多线程 学习
  2. 技术开发频道一周精选2007-8-3
  3. Oracle树反向查询的优化(转载)
  4. 2753:走迷宫(dfs+初剪)//可以说是很水了。。。
  5. Polygons HDU - 1632 (半平面交)
  6. HDU - 2828 网络流
  7. EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS的删除创建
  8. C++ 序列式容器之vector
  9. Ubuntu 8.04 告白登岸德国柏林的地铁零碎
  10. 欣赏你的孩子(ZT)