当前位置: 首页 > news >正文

回溯法应用:求解n皇后问题

八皇后问题是十九世纪著名的数学家高斯于1850年提出的。她是应用回溯法的经典问题之一。
问题描述:
在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。可以把八皇后问题扩展到n皇后问题,即在n×n的棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上。

约束条件分析:
显然,棋盘的每一行只能放一个皇后,所以n皇后问题的解应该是一个n元向量,X={X1,X2,X3…Xn}; Xi表示第i个皇后放在第i行第Xi列,其中1<=i<=n,且1<=Xi<=n;
由于皇后不能在同一列,所以,解向量X还必须满足Xi != Xj;
由于两个皇后不能在同一条斜线上,假设两个皇后的坐标位置为(i,Xi),(j, Xj);
在棋盘斜线为-1的情况下,满足条件Xi-Xj=j-i;
在棋盘斜线为1的情况下,Xi-Xj=i-j; 整理该条件条件即:
在这里插入图片描述

案例分析:
为了简化回溯搜索的过程,先来讨论下四皇后问题:

四皇后问题的解空间树是一个完全4叉树,树的根结点表示搜索的初始状态,从根结点到第2层结点对应皇后1在棋盘中第1行的可能摆放位置,从第2层结点到第3层结点对应皇后2在棋盘中第2行的可能摆放位置,依此类推,搜索过程如下:
在这里插入图片描述
伪代码:
算法:回溯法求解n皇后问题

1、初始化:解向量x[n]={-1},k=1;

2、while (k>=1)

2.1、把皇后k摆放在下一列的位置,即x[k]++;
2.2、从x[k]开始依次考察每一列。如果皇后k摆放在x[k]位置上不冲突,则转2.3;否则x[k]++, 试探下一列;
2.3、若n个皇后已经全部摆放,则输出一个解,结束;
2.4、若尚有皇后没摆放,则k++,转2;摆放下一个皇后
2.5、若x[k]出界,则回溯,x[k]=-1,k- -,转2;重新摆放皇后k

3、退出循环,说明n皇后问题无解;

相关文章:

  • 流水线作业调度最小时间问题
  • 动态路由RIP配置
  • 机器学习-梯度下降实验
  • 如何使用github协作(修改远端仓库)
  • 工具使用之notepad++配置C/C++编译环境
  • javaweb期末开发项目笔记
  • Mysql安置配置过程中的问题及解决方法
  • 机器学习实验四 ——基于距离的层次聚类
  • 机器学习第二关——k-means算法流程
  • eclipse中怎么删除Web App Libraries重复的jar包
  • 常见Http响应状态码
  • 记录EduCoder实验平台的感受(答案匹配机制)
  • 二手车交易系统数据库的表格设计
  • eclipse建servlet 注解正确 却无法访问
  • 软件项目管理EAC、ETC的计算
  • [译]Python中的类属性与实例属性的区别
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Linux系统编程】快速查找errno错误码信息
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • CSS 专业技巧
  • flask接收请求并推入栈
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript设计模式之工厂模式
  • magento 货币换算
  • MySQL的数据类型
  • Next.js之基础概念(二)
  • Sublime text 3 3103 注册码
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 翻译:Hystrix - How To Use
  • 机器学习中为什么要做归一化normalization
  • 探索 JS 中的模块化
  • 线性表及其算法(java实现)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 你对linux中grep命令知道多少?
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)常见O(n^2)排序算法解析
  • (day6) 319. 灯泡开关
  • (附源码)计算机毕业设计ssm电影分享网站
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • ./configure,make,make install的作用
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net Application的目录
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET连接数据库方式
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .Net小白的大学四年,内含面经
  • .Net组件程序设计之线程、并发管理(一)
  • .pop ----remove 删除
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ::前边啥也没有