蓝桥--2n皇后问题(递归)--搬运+整理+注释
N皇后问题:
#include <iostream>
#include <cmath>
using namespace std; int N;
int queenPos[];//用来存放算好的皇后位置。最左上角是(0,0) void NQueen(int k); int main()
{
cin >> N;
NQueen(); //从第0行开始摆皇后
return ;
}
void NQueen(int k) //在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
{
int i;
if (k == N) // N 个皇后已经摆好
{
for (i = ; i < N; i++)
cout << queenPos[i] + << " ";
cout << endl;
return;
}
for (i = ; i < N; i++)//逐一尝试第k个皇后所在的列i.
{
int j;
for (j = ; j < k; j++)
{
//和已经摆好的 k个皇后的位置比较,看是否冲突
//queenPos[j] == i表示第j个皇后所在的列queenPos[j]与第k个皇后所在的列i相等
//abs(queenPos[j] - i) == abs(k-j)表示第k个皇后和第j个皇后在同一个斜线(行之差与列之差绝对值相等)
if (queenPos[j] == i || abs(queenPos[j] - i) == abs(k - j))
{
break; //冲突,则试下一个位置
}
}
if (j == k) //当前选的位置 i 不冲突
{
queenPos[k] = i; //将第k个皇后摆放在第i列
NQueen(k + );
}
} //for( i = 0;i < N;i ++ )
}
2N皇后:
#include<iostream>
#include<math.h>
using namespace std;
#define N 100
int wq[N]; //whitequeen,黑皇后位置
int bq[N]; //blackqueen,白皇后位置
int cb[N][N]; //chessboard,棋盘
int num; //皇后数目
int count = ; //不同放置情况计数 int bqueen(int pos) //黑色皇后放置
{
int i;
for (i = ; i < pos - ; i++)
{
int judge = bq[i] - bq[pos - ];
if ( == judge || abs(judge) == abs(pos - - i))
return ;
}
if (pos == num)
{
::count++;
return ;
} for (int i = ; i < num; i++)
{
if (i != wq[pos] && cb[pos][i])
{
bq[pos] = i;
bqueen(pos + );
}
}
}
int wqueen(int pos) //白色皇后放置
{
int i;
for (i = ; i < pos - ; i++)//处理之前置入的皇后,判断是否冲突,冲突就返回,同时貌似放在这边还能使递归能返回,很巧妙,博主我只是搬运
{
int judge = wq[i] - wq[pos - ];
if ( == judge || abs(judge) == abs(pos - - i ))
return ;
} //当前的pos意为已经有pos个放好了,这次函数在处理pos+1的调用
if (pos == num)//放满了才会调用
{
bqueen();
return ;
} for (int i = ; i < num; i++)
{
if (cb[pos][i])//该位置是否能放,能放的话,每一个都试一下,如果不行,会返回0----当前不判断的是否能放,由N+1
//来查看N次是否能放,不能放就会返回0
{
wq[pos] = i;
wqueen(pos + );
} }
} int main()
{
cin >> num;
for (int i = ; i < num; i++)
for (int j = ; j < num; j++)
cin >> cb[i][j];
wqueen();//先白后黑
cout << ::count;
return ;
}
蓝桥--2n皇后问题(递归)--搬运+整理+注释的更多相关文章
- 2n皇后问题-------递归 暴力求解题与分布讨论题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- Java实现 蓝桥杯VIP 基础练习 2n皇后问题
基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一 ...
- 蓝桥杯 基础训练 2n皇后
数月前做的2N皇后基本看书敲代码的,然后发现当时的代码不对,正好做到算法提高的8皇后·改,顺便把以前的代码顺带改了下,题目如下: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋 ...
- 蓝桥杯 基础训练 BASIC-27 2n皇后问题
基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都 ...
- 蓝桥杯 2n皇后问题 深搜
默认大家会了n皇后问题 基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和 ...
- 蓝桥杯试题 基础练习 2n皇后问题以及n皇后问题
在学习2n皇后之前,我们应该认识一下n皇后问题: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于 ...
- 对八皇后的补充以及自己解决2n皇后问题代码
有了上次的八皇后的基础.这次准备解决2n皇后的问题,: //问题描述// 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行./ ...
- C语言 · 2n皇后问题
基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 锦囊1 搜索算法. 锦囊2 先搜索n皇后的解,在拼凑成2n皇后的解. 问题描述 给定一个n*n的棋盘,棋盘中 ...
- 计蒜课--2n皇后、n皇后的解法(一般操作hhh)
给定一个 n*nn∗n 的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入 nn 个黑皇后和 nn个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条斜线(包括正负斜线)上,任意的两个白皇后都 ...
随机推荐
- 快速开启MySQL慢日志查询的方法
MySQL慢日志查询对于很多刚接触MySQL数据的新人来说比较陌生,下面就为您介绍MySQL慢日志查询的用法和好处,供您参考. mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是 ...
- [摘录]全面学习GFW
转载自:https://cokebar.info/archives/253 GFW会是一个长期的存在.要学会与之共存,必须先了解GFW是什么.做为局外人,学习GFW有六个角度.渐进的来看分别是: 首先 ...
- vue.js数据绑定语法
原始高清大图下载 1.数据绑定 html代码: <div id="first" class="first">msg:{{msg}}</div& ...
- mui的picker组件填坑
在公司项目用到mui,vue进行开发 import mui from './assets/js/mui.min.js'后 加window.mui = mui再 import './assets/js/ ...
- JSP jsp内置对象
jsp(java server pages):java服务器端的页面 JSP的执行过程 1.浏览器输入一个jsp页面 2.tomcat会接受*.jsp请求,将该请求发送到org.apache.ja ...
- css实现瀑布流
<style> .container{ column-width:250px; -webkit-column-width:250px; ...
- rest_framework序列化组件
一.Django自带的序列化组件 ==>对象序列化成json格式的字符串 from django.core import serializers from django.core import ...
- 判断浏览器是pc端还是移动端
var browser = { versions: function() { var u = navigator.userAgent, app = navigator.appVersion; retu ...
- c++中三种继承方式的区别
public公有继承 protected保护继承 private私有继承 我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用. 公有继承时 ...
- xcode在代码中查找中文
总是忘记xcode中查找中文,这次记下来,以后就不会忘记了,哈哈 请看下图: 切换到查找,点击find后面的text,选择Regular Expression,然后输入 1. 查找非ascii的字符 ...