2n皇后问题

#include<iostream>
#include<vector>
using namespace std;
int cnt = 0, n;
vector< vector<int> > vi(9, vector<int>(9,0) ); //储存棋盘
vector<int> row1(9, 0), row2(9, 0), md1(19, 0), md2(19, 0), vd1(19, 0), vd2(19, 0); // row1记录每行是否有放了黑棋, row2记录每行是否有放了白棋。 md1记录每条主对角是否有放了黑棋,md2记录每条主对角线是否有放了白棋。vd1记录每条副对角线是否有放了黑棋,vd2记录每条副对角线是否有放了白棋。
void DFS(int deep){ //回溯
if(deep == n+1){ //成功摆放完,cnt++
cnt++;
return ;
}
for(int i=1; i<=n; i++){
if(vi[deep][i] && !row1[i] && !md1[deep-i+n] && !vd1[deep+i]){ //判断此处是否可以摆放棋子,且所在行,对角线处是否有同颜色的棋子,列不用,因为每列就放该颜色一枚棋子
vi[deep][i]=0; row1[i]=1; md1[deep-i+n]=1; vd1[deep+i]=1; //修改数据
for(int j=1; j<=n; j++){ //处理另一种颜色的棋子
if(vi[deep][j] && !row2[j] && !md2[deep-j+n] && !vd2[deep+j]){
vi[deep][j]=0; row2[j]=1; md2[deep-j+n]=1; vd2[deep+j]=1;
DFS(deep+1);
vi[deep][j]=1; row2[j]=0; md2[deep-j+n]=0; vd2[deep+j]=0; //改回原来的数据,防止数据变脏
}
}
vi[deep][i]=1; row1[i]=0; md1[deep-i+n]=0; vd1[deep+i]=0;
}
}
}
int main(){
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>vi[i][j];
DFS(1);
cout<<cnt<<endl;
return 0;
}

基础训练 2n皇后问题的更多相关文章

  1. 蓝桥杯 基础训练 2n皇后

    数月前做的2N皇后基本看书敲代码的,然后发现当时的代码不对,正好做到算法提高的8皇后·改,顺便把以前的代码顺带改了下,题目如下: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋 ...

  2. [蓝桥杯][基础训练]2n皇后问题

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

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

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

  4. n皇后问题与2n皇后问题

    n皇后问题 问题描述: 如何能够在 n×n 的棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后 (任两个皇后都不能处于同一条横行.纵行或斜线上) 结题思路: 可采用深度优先算法,将棋盘看成 ...

  5. 对八皇后的补充以及自己解决2n皇后问题代码

    有了上次的八皇后的基础.这次准备解决2n皇后的问题,: //问题描述// 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行./ ...

  6. C语言 · 2n皇后问题

    基础练习 2n皇后问题   时间限制:1.0s   内存限制:512.0MB        锦囊1 搜索算法. 锦囊2 先搜索n皇后的解,在拼凑成2n皇后的解. 问题描述 给定一个n*n的棋盘,棋盘中 ...

  7. 蓝桥--2n皇后问题(递归)--搬运+整理+注释

    N皇后问题: #include <iostream> #include <cmath> using namespace std; int N; ];//用来存放算好的皇后位置. ...

  8. 计蒜课--2n皇后、n皇后的解法(一般操作hhh)

    给定一个 n*nn∗n 的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入 nn 个黑皇后和 nn个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条斜线(包括正负斜线)上,任意的两个白皇后都 ...

  9. 2n皇后 - 回溯

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

随机推荐

  1. Tinghua Data Mining 6

    Networks 多层感知机 不是说这个神经网络要与人的大脑神经完全相似,也不是说要多么的强大,而是在一定程度上模拟了人脑神经元的能力,就足够了 为什么要w0呢,因为没有w0超平面一定会经过原点,所以 ...

  2. IMG 的alt和title的区别(转自 百度空间--路云的世界)

    图片标签img中alt与title的区别 图片标签img中alt与title的区别 可能很多新手在做站内优化的时候,不明白图片标签img中alt与title的区别,今天为大家说一下其中的区别. 大家可 ...

  3. [译]Understanding ECMAScript6 对象

    对象 ECMAScript6将大量精力聚焦在提升对象的实用性性上.聚焦的意义在于JavaScript中几乎每一个值是由对象中的某种类型表示.此外,在一个普通的JavaScript程序中使用对象的数量持 ...

  4. Windows科研工具

    本人是计算机专业的在读研究生,平时工作环境主要用win10远程ubuntu,下面推荐一些我用过且觉得不错的应用. 桌面美化 Wallpaper Engine:动态壁纸,很养眼,不过要下stream,花 ...

  5. yii2 加载静态资源

    1.在 assets/AppAsset 里定义方法 <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright ( ...

  6. 接口文档管理工具rap

    git地址:  https://github.com/thx/RAP wiki : https://github.com/thx/RAP/wiki/home_cn 视频教程: http://thx.g ...

  7. ubuntu 下 docker安装

    1移除以前安装docker sudo apt-get remove docker docker-engine docker-ce docker.io 2 安装包以允许apt通过HTTPS使用存储库 s ...

  8. JQueryUI基础知识学习

    JQueryUI官网 http://jqueryui.com/ 菜鸟教程 http://www.runoob.com/jqueryui/jqueryui-tutorial.html

  9. Java语言中自动生成随机数

    参考原文:http://zhidao.baidu.com/link?url=nB3BT69wmUAiSPfKGgK5Q7HOFFP9AIE04AthreRd9yYcwKhUQsQRWlMdMhW1Qm ...

  10. iOS图片目录批量复制到android图片目录

    复制shell脚本 #!/bin/bash for i in `ls` do for imgname in `ls $i | grep '^WM.*'` do echo $imgname cp $i/ ...