蓝桥--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个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条斜线(包括正负斜线)上,任意的两个白皇后都 ...
随机推荐
- windows 2008 r2或win7安装SP1补丁,安装sqlserver 2012
说明:安装sql server 2012时,win7和win2008r2系统都需要打sp1补丁. 1.SP1补丁下载地址(建议用迅雷下载): http://download.microsoft.com ...
- P3290 寻找第K大数
描述 寻找第K大数 N个小朋友在一起做游戏.每个小朋友在自己的硬纸板上写一个数,然后同时举起来.接着,小y老师提一个问题,看哪个小朋友先抢答出来.问题是:在这N个数中,第K大的是哪个数?请你编程完成. ...
- jquery显示隐藏效果
通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素toggle() 方法来切换 hide() 和 show() 方法. 1.hide()隐藏元素 $(se ...
- 在使用seek()函数时,有时候会报错为 “io.UnsupportedOperation: can't do nonzero cur-relative seeks”,代码如下:
__author__ = 'ZHHT' #!/usr/bin/env python # -*- coding:utf-8 -*- import os f = open("test1" ...
- GreenDao的简单使用说明(五)多表n:m
在设计一些比较复杂的数据库结构的时候,我们会遇到表之间是n:m的关系,就是常说的多对多的关系,最常用的情况,就是用户权限这块,日常最常见的就是学生与老师的关系了,哪么我们来看一下GreenDao中如何 ...
- 使用PowerShell 获取azure image publisher offer sku 信息
使用azure powershell 获取指定区域的可用镜像 publisher offer sku信息 param ( [parameter(Mandatory = $false)] $Locati ...
- ArcGIS Server 10.1发布GP服务
ArcGIS Server 10.1发布GP服务 ArcGIS Server 10.1发布GP服务确实更简单了,只是刚使用不怎么习惯.ArcGIS Server 10.1发布GP服务需要先在ArcCa ...
- ssh连接github连不上
连接github报端口22连接不上: 输入命令展示出ssh_config内容后: vim /etc/ssh/ssh_config 或者使用open /etc/ssh/ssh_config命令在文本编辑 ...
- POJ 3252 Round Numbers (区间DP,基础)
题意: 统计区间[L,R]有多少个数,其二进制表示法中的0的个数不少于1的个数?(不允许前缀0) 思路: 状态表示为 [当前第几位][总位数][1的个数],最后判断一下1的个数是否满足条件,要注意前导 ...
- Vue中使用computed与watch结合实现数据变化监听
目的:当数据变化时,为其中重要数据增加边框,实现闪烁以达到提醒目的.数据格式如下,只有在未处理火警/故障时增加闪烁边框.可以使用watch进行深度监听.数据格式已定,也非常明确要监听的数据是有两个.既 ...