[蓝桥杯][基础训练]2n皇后问题
Description
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
Input
输入的第一行为一个整数n,表示棋盘的大小。
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。
Output
输出一个整数,表示总共有多少种放法。
Sample Input
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Sample Output
2
#include<iostream>
#include<cmath>
using namespace std;
int n;
int map[][];//存储棋盘信息
int pos_black[];//存储黑皇后的行位置
int pos_white[]; //存储白皇后的行位置
int ans;
int check_white(int cur){//检验白皇后的位置是否符合要求
for(int i=;i<cur;i++){//cur列之前的列都和cur列比较
if(pos_white[i]==pos_white[cur]||abs(i-cur)==abs(pos_white[i]-pos_white[cur]))
//检验是否在同一行或者对角线上
return ;
}
return ;
}
int check_black(int cur){//检验黑皇后的位置是否符合要求,和白皇后一样
for(int i=;i<cur;i++){
if(pos_black[i]==pos_black[cur]||abs(i-cur)==abs(pos_black[i]-pos_black[cur]))
return ;
}
return ;
}
void dfs_white(int cur){//依次放置白皇后
if(cur==n+){//如果已经放置n个了,答案+1
ans++;
return;
}
for(int i=;i<=n;i++){
if(map[i][cur]==)//看地图条件是否符合
continue;
if(pos_black[cur]==i)//看有没有与黑皇后的位置重合
continue;
pos_white[cur]=i;//将白皇后放在第i行第cur列
if(check_white(cur))//如果刚才放置的这个白皇后符合要切
dfs_white(cur+);//就开始放置下一个白皇后
}
}
void dfs_black(int cur){//依次放置黑皇后
if(cur==n+){//如果已经放置n个了
dfs_white();//开始放置白皇后
return;
}
for(int i=;i<=n;i++){
if(map[i][cur]==)//如果地图符合条件
continue;
pos_black[cur]=i;//将黑皇后放在第i行第cur列
if(check_black(cur))//如果刚放置的黑皇后符合条件
dfs_black(cur+);//放置下一个黑皇后
}
}
int main(){
cin>>n;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cin>>map[i][j];
}
}
dfs_black();//开始放置黑皇后
cout<<ans;//输出
return ;
}
其实先放置黑皇后和白皇后都一样,本文以先放置黑皇后为例,
这样的话,放置白皇后的时候要注意,不能放在黑皇后上。
黑皇后放置完n个后,开始放置白皇后,白皇后放置完n个后,答案数加一,这是一次大循环
这里是一列一列的放,所以同一列一定不会有重复的,
只需判断 行 和 对角线 是否有重复的就行了
另外,其实哪个叫行哪个叫列都无所谓,你分得清就行
[蓝桥杯][基础训练]2n皇后问题的更多相关文章
- 蓝桥杯 基础训练 2n皇后
数月前做的2N皇后基本看书敲代码的,然后发现当时的代码不对,正好做到算法提高的8皇后·改,顺便把以前的代码顺带改了下,题目如下: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋 ...
- 蓝桥杯—BASIC-27 2n皇后问题(DFS)
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- 蓝桥杯之 2n皇后问题(双层dfs,暴力)
Description 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后 和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两 个白皇后都不在同 ...
- 蓝桥杯训练 2n皇后问题
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一条对角线上 ...
- 蓝桥杯训练 2n皇后
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- 蓝桥杯 基础训练 BASIC-27 2n皇后问题
基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都 ...
- 基础训练 2n皇后问题
2n皇后问题 #include<iostream> #include<vector> using namespace std; int cnt = 0, n; vector&l ...
- java 蓝桥杯基础训练 回文数
public class _8回文数 { //两种方法都可以 // public static void main(String[] args) { // String zheng ="&q ...
- [蓝桥杯][基础训练]Sine之舞
Description 最近FJ为它的奶牛开设了数学分析课,FJ知道,若要学好这门课,必须有一个好的三角函数基本功. 所以他为奶牛们做了一个“Sine之舞”的游戏,寓教于乐,提高奶牛的计算能力. 不妨 ...
随机推荐
- 算法竞赛入门经典第二版 竖式问题 P42
#include<bits/stdc++.h> using namespace std; int inset(char *s,int num) { //判断数字是否在数字集中 int le ...
- 题解【AcWing271】杨老师的照相排列
题面 经典的线性 \(\text{DP}\) . 设 \(dp_{a,b,c,d,e}\) 表示第 \(1\) 排有 \(a\) 个人,第 \(2\) 排有 \(b\) 个人, 第 \(3\) 排有 ...
- oracle 锁表处理
1.查询 select object_name,machine,s.sid,s.serial#from v$locked_object l,dba_objects o ,v$session swher ...
- 【NOIP2001普及组】最大公约数和最小公倍数问题
P1029 最大公约数和最小公倍数问题 最大公约数用辗转相除法: 最小公倍数:两个数的乘积=他们的最大公约数*最小公倍数,既然两个数的乘积及其最大公约数已知,那么最小公倍数也可以求了. #includ ...
- java List 排序,升序,降序
import java.util.*; public class EntrySets { public static void main(String[] args) { Map<Object, ...
- Codeforces Round #609 (Div. 2) A-E简要题解
contest链接:https://codeforces.com/contest/1269 A. Equation 题意:输入一个整数,找到一个a,一个b,使得a-b=n,切a,b都是合数 思路:合数 ...
- FineUIPro/Mvc/Core v6.1.0 发布了!
FineUIPro/Mvc/Core v6.1.0 正式发布了(2019-12-25),这个版本主要是BUG修正,并增加了一些新特性,建议升级到此版本. 在列举新版本特性之前,我们先来回顾下每次发布大 ...
- jsonp实现js跨域请求
sonp是跨域通信的一个协议 具体来说jsonp实现跨域请求其实是使用js文件引用(js文件不一定是.js结尾)可跨域的性质,将请求的结果包裹在客户端需要调用的js方法内部.需要前后端配合使用. 前段 ...
- ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法
https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...
- 快速排序 QuickSort (C++迭代,递归)
/* * QuickSort.h * 快速排序(将每一个元素转换为轴点元素) * Created on: 2020年2月12日 * Author: LuYonglei */ #ifndef SRC_Q ...