蓝桥杯之 2n皇后问题(双层dfs,暴力)
Description
和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两
个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
Input
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,
如果一个整数为0,表示对应的位置不可以放皇后。
Output
Sample Input
No.1
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1 No.2
4
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Sample Output
No.1
2 No.2
0
Source
#include<bits/stdc++.h>
using namespace std;
#define max_v 10
#define me(a,x) memset(a,x,sizeof(a))
int a[max_v][max_v];
int M[max_v],L[max_v],R[max_v];
int c;
int n;
struct node
{
int b[max_v][max_v];
}p[max_v*max_v];
void f(int k)
{
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
p[k].b[i][j]=a[i][j];
}
}
}
void dfs1(int i)
{
for(int j=;j<n;j++)
{
if(a[i][j]==)
continue;
if(M[j]==&&L[i+j]==&&R[i-j+n]==&&a[i][j]==)
{
M[j]=L[i+j]=R[i-j+n]=;
a[i][j]=-;
if(i==n-)
{
c++;
f(c);
}else
{
dfs1(i+);
}
M[j]=L[i+j]=R[i-j+n]=;
a[i][j]=;
}
}
}
void dfs2(int i,int k)
{
for(int j=;j<n;j++)
{
if(p[k].b[i][j]==||p[k].b[i][j]==-)
continue;
if(M[j]==&&L[i+j]==&&R[i-j+n]==&&p[k].b[i][j]==)
{
M[j]=L[i+j]=R[i-j+n]=;
p[k].b[i][j]=-;
if(i==n-)
{
c++;
}else
{
dfs2(i+,k);
}
M[j]=L[i+j]=R[i-j+n]=;
p[k].b[i][j]=;
}
}
}
int main()
{
cin>>n;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
cin>>a[i][j];
me(M,);
me(L,);
me(R,);
c=;
dfs1(); int rs=;
int m=c;
for(int i=;i<=m;i++)
{
me(M,);
me(L,);
me(R,);
c=;
dfs2(,i);
rs+=c;
}
cout<<rs<<endl;
return ;
}
蓝桥杯之 2n皇后问题(双层dfs,暴力)的更多相关文章
- 蓝桥杯—BASIC-27 2n皇后问题(DFS)
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- 蓝桥杯 基础训练 2n皇后
数月前做的2N皇后基本看书敲代码的,然后发现当时的代码不对,正好做到算法提高的8皇后·改,顺便把以前的代码顺带改了下,题目如下: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋 ...
- 蓝桥杯训练 2n皇后问题
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一条对角线上 ...
- 蓝桥杯训练 2n皇后
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- [蓝桥杯][基础训练]2n皇后问题
Description 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行 ...
- 蓝桥杯之剪格子(经典dfs)
如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...
- 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)
X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
- 蓝桥杯 历届试题 剪格子(dfs搜索)
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |* || +--****--+ ||* | ** ...
随机推荐
- HDU6198
number number number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- POJ3090(SummerTrainingDay04-M 欧拉函数)
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7450 Accepted: ...
- 排序算法(5)--Selection Sorting--选择排序[2]--Heap Sort--堆排序
1.基本思想 具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n ...
- 通过api管理grafana
1. 生成api key 参考: http://docs.grafana.org/http_api/auth/ 2.点击添加后,生成了个获取一个deshboards的api样例 3.放到linux上运 ...
- Javascript经典算法学习1:产生随机数组的辅助类
辅助类 在几个经典排序算法学习部分,为方便统一测试不同算法,新建了一个辅助类,主要功能为:产生指定长度的随机数组,提供打印输出数组,交换两个元素等功能,代码如下: function ArraySort ...
- VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
更多资源请百度搜索:前端资源网 欢迎关注我的博客:www.w3h5.com 最近遇到一个H5页面的 iPhone X 刘海兼容问题.查到一个 XCode 编辑器,可以模拟 iPhone X 环境运行. ...
- Tracing 在PeopleSoft 程序中怎么开启
本文介绍一些常用的跟踪方法在Applications,Application Engine,PeopleSoft,Integration Broker,Cobol中. 1.Application En ...
- vs2015 停 在 update kb2999226 一直不动
查找原因是因为装微软补丁,官网找到该补丁安装 Update for Windows 7 for x64-based Systems (KB2999226) https://www.microsoft. ...
- [Android] (在ScrollView里嵌套view)重叠view里面的onTouchEvent的调用方法
在我前面的自定义裁剪窗口的代码中,我把裁剪的view放在了大的scrollview里,这样就出现了程序只能触发scrollview,无法操作我的裁剪窗口.所以我加了那篇博客下面最后两段代码.其实我遇到 ...
- IAM页面是在统一区分配的还是在混合区分配的?
IAM页面是在统一区分配的还是在混合区分配的? IAM页面的作用这里就不说了,网上的资料很多 文章中用到的工具:查看SQLSERVER内部数据页面的小插件Internals Viewer 先建立四张表 ...