<font size=5 face"微软雅黑">N皇后Problem Description

<font size=4 face"微软雅黑">在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。

你的任务是,对于给定的N,求出有多少种合法的放置方法。

<font size=5 face"微软雅黑">Input

<font size=4 face"微软雅黑">共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。

<font size=5 face"微软雅黑">Output

<font size=4 face"微软雅黑">共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

<font size=5 face"微软雅黑">Sample Input

<font size=4 face"微软雅黑">1

8

5

0

<font size=5 face"微软雅黑">Sample Output

<font size=4 face"微软雅黑">1

92

10

<font size=5 face"微软雅黑">正确代码(暴力解)

#include<iostream>
#include<cmath>
using namespace std;
int n,sum;
int que[100];
void quee(int k)
{
if(k==n)
{
sum++;
}
for(int i=0;i<n;i++)//尝试摆放第k行皇后的位置。 这里是第i列。
{
int j;
for(j=0;j<k;j++)//和已经摆好的k个皇后比较,查看是否冲突。
{
if(que[j]==i||abs(que[j]-i)==abs(k-j))//列的差和行的差绝对值相同则说明他们能互相吃到。
break;
}
if(j==k){
que[k]=i;//将第k个皇后摆放在位置i。k->行,i->列。
quee(k+1);
}
}
}
int main()
{
cin>>n;
quee(0);
cout<<sum;
}

<font size=5 face"微软雅黑">代码理解

<font size=4 face"微软雅黑">解决n皇后问题的主要思路是如何摆放皇后的位置使八个皇后都不会有生命危险,八皇后的核心代码是如何判断皇后的摆放位置,即

		 if(que[j]==i||abs(que[j]-i)==abs(k-j))//列的差和行的差绝对值相同则说明他们能互相吃到。
break;

这一判断,其中前者是判断皇后是否在同一列,后者是判断皇后是否在对角线上,对角线的判断是两个皇后之间的行之差是否等于列之差,若相等则在对角线上,八皇后的回溯递归问题比较抽象,他使用两层嵌套for循环进行行和列的判断,第i行,第j列,在for循环外面的

	if(k==n)
{
sum++;
}

并不会显得不能理解,因为在一层一层递归之后,计算机最终找到了其中之一的安置方法,这是由n个递归进行的判断,当第n个递归表示第n个皇后可以安放后,第n+1次递归就会进行这个if判断,然后sum+1,之后递归回溯到j次循环内继续进行循环,之后j循环完毕,继续回溯到i次循环。

#C++初学记录(N皇后#回溯递归)的更多相关文章

  1. 2553 ACM N皇后 回溯递归

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553 中文题目,题意很简单. 思路:听说这是学习递归的经典题目,就来试试,发现自己一点想法都没有,一遇到递 ...

  2. #C++初学记录(深度搜索#递归)

    深度搜索 走地图的题目是深度搜索里比较容易理解的题目,更深层次的是全排列和七皇后等经典题目,更加难以理解,代码比较抽象. 题目:红与黑 蒜厂有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖. ...

  3. YTU 3013: 皇后问题(递归)

    3013: 皇后问题(递归) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 ...

  4. 2n皇后 - 回溯

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

  5. 再谈循环&迭代&回溯&递归&递推这些基本概念

    循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...

  6. N皇后问题--递归回溯

    著名的N皇后问题,就是先按照行一行一行的找,先找第一行,第一行找到一列能满足条件,继续找下一行,如果下一行也找到一列能满足条件,继续找下一行,一次类推,最终找到解, 但是,如果找不到的话, 就说明上一 ...

  7. #C++初学记录(阶乘#递归)

    练习题目三 用递归进行阶乘 运行代码 #include<iostream> using namespace std; int f(int n); int n; int main() { c ...

  8. js实现八皇后,回溯法

    八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...

  9. java实现八皇后问题(递归和循环两种方式)

    循环方式: package EightQueens;   public class EightQueensNotRecursive { private static final boolean AVA ...

随机推荐

  1. ceph luminous版部署bluestore

    简介 与filestore最大的不同是,bluestore可以直接读写磁盘,即对象数据是直接存放在裸设备上的,这样解决了一直被抱怨的数据双份写的问题 Bluestore直接使用一个原始分区来存放cep ...

  2. windows下使用virtualenv对python进行多版本隔离开发

    1.windows下安装virtualenv pip install virtualenv 2.进入项目目录,创建虚拟环境,例如: virtualenv venv (默认python版本) virtu ...

  3. layui.table前端+后台处理+分页

    前端 注:监听工具条没有详细写,但路子一样的 @section head{ <script src="~/Content/jquery-easyui-1.5.5.4/jquery.ea ...

  4. 7. Input and Output

    7. Input and Output There are several ways to present the output of a program; data can be printed i ...

  5. 17.centos7基础学习与积累-003-命令练习01

    1.从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 linux命令的学习: 创建目录:mkdir mkdir /data mkdir ...

  6. 采用MySQL-MMM做DB高可用时,遇到的一个小坑

    一.服务器分布   二.MySQL-MMM 配置 (1).公共配置[所有DB节点:Master1.Master2.Slave1.Slave2   Monitor节点] # vim /etc/mysql ...

  7. @RequestMapping中的注解

    在org.springframework.spring-web的jar包中在以下层级下: org.springframework.web.bind.annotation; // // Source c ...

  8. netty实现websocket发送文本和二进制数据

    原文:https://huan1993.iteye.com/blog/2433552 最近在学习netty相关的知识,看到netty可以实现 websoket,因此记录一下在netty中实现webso ...

  9. MyBatis-Plus-Generator配置

    本文仅对使用MyBatis-Plus的代码生成器配置做保存,适合使用了该插件的童鞋做参考. 内部有大量默认配置,有性趣的童鞋可以研究下源码. ps:官方文档更齐全http://mp.baomidou. ...

  10. mini_frame(web框架)

    文件目录: dynamic中:框架 static:css,jss静态文件 teplates:模板 web_server.conf: 配置文件 web_server.py: 主程序 run.sh:运行脚 ...