回溯算法——n皇后问题
2. 终止条件;因为是递归,就一定要有终止条件
3. 核心回溯算法
N叉树:(
for循环:横向遍历
递归 :纵向遍历
)
4.输出返回值
这就是回溯算法的核心介绍
下面就开始找题来上手!!!
对你有帮助就动动发财的小手点个赞 !!!
题目要求
在n*n格的棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一对角线上,问有多少种摆法。
输入格式 :8
输出格式 :92
题目分析
一、对于n皇后这个棋盘,有这些规则
1.不能同一行
2.不能同一列
3.不能在同一斜线上
正常情况下,对于一个棋盘,我们都会使用二维数组
但是对于这个游戏规则,我们可以知道使用一维数组,就行,因为每一行只能放一个棋子
二、对于这三个规则,所以我们的核心层就应该,有两个判断(使用一维数组,不用考虑行上的问题)
当你在准备在当前这一列上放皇后,需要判断:
1. 当前皇后位置与之前已经放好的皇后是否在同一列,是,就更换列,一直到第N列(到了边界),就需要回溯到上一行皇后,更改上一行皇后的列。
2. 当前皇后位置与之前已经放好的皇后是否在同一斜线上(即45°或135°),是,就更换列,一直到第N列(到了边界),就需要回溯到上一行皇后,更改上一行皇后的列。
三、递归过程中的终止条件
我们可以思考,回溯算法,用最直白的话解释就是,当前这路不通,怎么办,回去,到上一个位置换个方向;
那终止条件不就是,你一直回溯到了第一步,并且走到了第一步的最后一个位置,没有其他选择了,那就结束呗,无路可走还继续呆着干嘛,哈哈哈哈;
代码实现
#include<bits/stdc++.h> using namespace std;int main(){int n,sum=0;cin>>n; int HANG= 0;//皇后个数,行数; int LIE = 0;//皇后占据的列为;int queen[n] = {0};//储存皇后的位置,值为列; while(1){int AK = 0; //攻击if(HANG== 1 && queen[0] == 7 && LIE == 7)break;//终止条件 //判断是否在同一列,统一斜线for(int i=0;i<HANG;i++){ if(queen[i] == LIE)AK = 1; //同一列,攻击 if(HANG-i == queen[i]-LIE ||HANG-i == -(queen[i]-LIE) )AK = 1;//同一斜线,攻击 }//判断可不可以放入if(AK == 0){ //表示可以放置queen[HANG] = LIE; HANG++; LIE = 0; if(HANG== 8)sum++; }else{ LIE++; while(LIE>=8){ //回朔,上一个皇后往后移一格HANG--; LIE = queen[HANG]+1; }}}cout<<sum<<endl;return 0;
}
创作不易,欢迎评论留言,关注点赞不迷路!!!
创作不易,欢迎评论留言,关注点赞不迷路!!!
创作不易,欢迎评论留言,关注点赞不迷路!!!
回溯算法——n皇后问题相关推荐
- 回溯算法n皇后问题_使用回溯算法的N Queen问题和解决方案
回溯算法n皇后问题 N-皇后问题 (N - Queen's problem) The n – queen problem is the generalized problem of 8-queens ...
- 回溯算法(八皇后问题)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 回溯算法--8皇后问题
前些天有同学去跑社招,面试的时候被人问到8皇后问题,很是杯具.这也说明我们平时对于经典的算法问题关注太少,但设计算法的能力也不是一日之功,需要的是长期的练习和锻炼提高,比如我就很需要锻炼啊,哈哈. 废 ...
- 分治回溯算法----八皇后问题
八皇后问题:在一个8×8的棋盘中,放入8个皇后棋子,要求同行同列同斜线不能有重复的皇后棋子,八皇后问题一共有92种解法.如图所示:即八皇后问题的一个解. //分治回溯算法解决八皇后问题 public ...
- 学习笔记-回溯算法(八皇后问题)暴力法
八皇后问题暴力解决法(介绍代码有说明) 先展示结果: 我这里用的是一维数组来展示的结果 array={7,3,0,2,5,1,6,4} 7的下标为0, 在这里下标+1表示的是第几个皇后也是行的位置,a ...
- 回溯算法(Backtracking Algorithm)之八皇后问题
文章目录 1. 回溯算法思想 2. 算法应用 2.1 八皇后问题 1. 回溯算法思想 前面讲过贪心算法并不能保证得到最优解,那怎么得到最优解呢? 回溯思想,有点类似枚举搜索.枚举所有的解,找到满足期望 ...
- C语言回溯算法解决N皇后问题
回溯算法的模型是 x++, not satisfy ? x-- : continue. 代码中x作列号,y[x]保存第x列上皇后放置的位置. 1 #include<stdio.h> 2 # ...
- 回溯 皇后 算法笔记_回溯算法:N皇后问题
给「代码随想录」一个星标吧! ❝ 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便 ...
- 回溯算法 | 追忆那些年曾难倒我们的八皇后问题
文章收录在公众号:bigsai 更多精彩干货敬请关注! 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 第一次遇到它的时候应该 ...
最新文章
- mysql5.6.40升级到mysql8.0.11 的步骤
- 高一计算机常考内容,高一信息科技合格考知识点.doc
- 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)
- python 网络运维框架scape_“python scape 教程“求PhotoScape X Pro for Mac软件
- php中怎么替换文字,php里面怎么替换文字
- 《Flutter 从0到1构建大前端应用》读后感—第6章【使用网络技术与异步编程】
- C# OCR 文字识别
- el-select默认选中第一个,设置默认值
- 人工神经网络编程内容,神经网络用什么编程
- 数据分析——实习僧数据分析岗招聘信息分析
- 挂耳式骨传导蓝牙耳机,2021骨传导耳机推荐
- 短说 3.7.1正式版更新【新增悬赏问答、打赏、付费看帖、IP属地】
- 2018版 主流SDR设备横向比较
- HDU 6047 Maximum Sequence 思维
- 复盘红米手机慢问题,针对小米手机 miui系统优化设置,实测红米note8,和k20 pro可行,流畅度起码提升了20%,能马上感觉到。
- C语言经典例题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,两年内每个月的兔子总数为多少?
- PaddleNLP实战:应用NeZha模型做微博情感6分类
- 计算机c语言二级题库及答案txt,计算机二级c语言题库及答案
- 【Mysql上分之路】第三篇:Mysql安装与配置、目录结构
- Chipscope run卡住问题Sample Buffer has 0 samples
热门文章
- python异步爬虫_Python实战异步爬虫(协程)+分布式爬虫(多进程)
- 基于涂鸦模组和ITOP4412开发板的宠物喂食器
- B/S软件与C/S软件区别
- 现在的百度竞价还可以做吗?前景和收入如何?
- 通讯:博物馆里过大年——英国科学博物馆举办科学“春晚”
- 对话Atlassian认证专家叶燕秀:Atlassian产品进入后Server时代,中国用户应当何去何从?
- 找一份Java工作面试需要具备的知识点框架(学会百战百胜!)
- 2020年中国网络经济年度洞察报告
- MessageSolution 企业邮件归档管理系统 EEA 存在信息泄露漏洞(CNVD-2021-10543)
- 不受局域网限制的遥控小车(esp8266+l298n+点灯科技平台)