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. 复习线程——状态和几个Thread方法

    一.线程的状态 (参考文章:https://blog.csdn.net/a58220655/article/details/76695142) 状态介绍 新建(new):处于该状态的时间很短暂.已被分 ...

  2. [译]Understanding ECMAScript 6 内容目录

    说明 浏览器与Node.js兼容 这本书是写给谁的 概述 帮助与支持 基本知识 更好的Unicode支持 其他字符串变化 其他正则表达式变化 Object.is() 块绑定 解构赋值 数字 总结 函数 ...

  3. 一个普通Java程序包含哪些线程??

    package com.java.threads; import java.lang.management.ManagementFactory; import java.lang.management ...

  4. 解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

    利用Itext可以实现pdf的高效动态生成,但在实践过程中遇到了一个问题: 即itext利用map中的值设置到pdf模板上建立的文本域中时:能成功生成,但是在部分浏览器上(360,QQ,等浏览器)无法 ...

  5. vue之导入Bootstrap和Jquery

    Vue引入bootstrap主要有两种方法 方法一:在main.js中引入,此方法导入的bootstrap中对于html,body的一些预设置的css样式可能无效. 一.引入jQuery 在当前项目的 ...

  6. 洛谷 P3853 [TJOI2007]路标设置

    路标设置 二分枚举"空旷指数", 做法与跳石头类似. #include <iostream> #include <cstdio> #include < ...

  7. ES-Mac OS环境搭建(1)

    前言 由于elasticsearch依赖Java,所以先要配置上Java环境,并且Java JDK必须要求1.8以上,这里以安装Java 1.8为例.安装环境如下: elasticsearch6.5. ...

  8. 判断后台service是否在运行

    public static boolean isServiceRunning(Context mContext,String className) { boolean isRunning = fals ...

  9. 【Web应用-网络连接】Azure Web 应用对外连接数上限分析

    在 Azure Web 应用中发起大量外部连接操作时,需要考虑已经建立了多少外部连接.当超过最大对外连接数时,Azure Web 应用将会产生套接字异常.Azure Web 应用对于各个级别的实例,对 ...

  10. sourcegrid统计报表画法以及EXCEL导出内容代码完全版

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...