#C++初学记录(N皇后#回溯递归)
<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皇后#回溯递归)的更多相关文章
- 2553 ACM N皇后 回溯递归
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553 中文题目,题意很简单. 思路:听说这是学习递归的经典题目,就来试试,发现自己一点想法都没有,一遇到递 ...
- #C++初学记录(深度搜索#递归)
深度搜索 走地图的题目是深度搜索里比较容易理解的题目,更深层次的是全排列和七皇后等经典题目,更加难以理解,代码比较抽象. 题目:红与黑 蒜厂有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖. ...
- YTU 3013: 皇后问题(递归)
3013: 皇后问题(递归) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 ...
- 2n皇后 - 回溯
题目地址:http://www.51cpc.com/web/problem.php?id=1172 Summarize: 1. 递归回溯: 2. 先扫完一种皇后,再扫描另一种: 3. 循环输入: 4. ...
- 再谈循环&迭代&回溯&递归&递推这些基本概念
循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...
- N皇后问题--递归回溯
著名的N皇后问题,就是先按照行一行一行的找,先找第一行,第一行找到一列能满足条件,继续找下一行,如果下一行也找到一列能满足条件,继续找下一行,一次类推,最终找到解, 但是,如果找不到的话, 就说明上一 ...
- #C++初学记录(阶乘#递归)
练习题目三 用递归进行阶乘 运行代码 #include<iostream> using namespace std; int f(int n); int n; int main() { c ...
- js实现八皇后,回溯法
八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...
- java实现八皇后问题(递归和循环两种方式)
循环方式: package EightQueens; public class EightQueensNotRecursive { private static final boolean AVA ...
随机推荐
- requests模块 简单使用
目录 requests模块 简单使用 Anaconda简单了解 简单了解 requests模块 使用requests模块 爬取搜狗首页源码数据 实现一个简易的网页采集器 解决乱码问题 解决UA检测问题 ...
- 分享一个vue项目“脚手架”项目的实现步骤
搭建缘由 源于公司每次新启动一个由多人协同开发的项目都由负责人初始化项目之后,每个人再去从私服pull一下项目才开始开发.但是每次初始化工程都是一步步的造轮子,一个个依赖去安装,新建一个个不同功能的文 ...
- SuperTab
Tab快捷键提示功能 下载 http://www.vim.org/scripts/script.php?script_id=1643 安装 # vi supertab.vmb : UseVimball ...
- grpc的简单用例 (golang实现)
这个用例的逻辑很简单, 服务器运行一个管理个人信息的服务, 提供如下的四个服务: (1) 添加一个个人信息 注: 对应于Unary RPCs, 客户端发送单一消息给服务器, 服务器返回单一消息 (2) ...
- linu学习记录--初学linux中的几个基本命令以及比较关键的man指令
import chardet chardet.detect() #传入参数可以输出查看参数的对应编码 首先是用decode将对象编码转换成unicode,然后用encode将对象编码转换成输出所需,u ...
- [ipsec][crypto] ike/ipsec与tls的认证机制比较
前言 接上篇:[ipsec][crypto] 有点不同的数字证书到底是什么 本篇内容主要是上一篇内容的延伸.抽象的从概念上理解了证书是什么之后,我们接下来 从实践的角度出发,以IKEv2和TLS两个协 ...
- rest-framework认证、权限组件
认证组件: models class User(models.Model): username = models.CharField(max_length=32) password = models. ...
- 零基础python教程-用Python设计你的第一个小游戏
学以致用,既然学习了python就要让它来实现我们想做的东西,这次咱就用python来做个简单小游戏,在实践中不断成长. 1.游戏代码: 输入数字,来猜测原作者心中所想的数字,猜中夸你,猜不中不夸你, ...
- vue input只允许输入数字
template: <input type="text" v-model="pageIndex" @keyup="inputChange&quo ...
- axios 的 get 方法 params 传参 400 的问题
axios 的 get 方法 params 传参,在输入框中输入某些特殊字符 例如中括号,请求时会直接报 400 错误,Bad Request. 原因:axios 的 get 方法,在使用 param ...