在学习现代软件工程构建之法这门课时,老师要求发表一篇博客,使用JAVA算法实现八皇后问题的求解。写这篇博客时,我学习了一些其他的博客,自己无法解决时,向他人学习也是一种方法。

国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

我们可以逐行或者逐列来进行可行摆放方案的遍历,每一行(或列)遍历出一个符合条件的 位置,接着就到下一行或列遍历下一个棋子的合适位置,这种遍历思路可以保证我们遍历过程中有一个条件是绝对符合的——就是下一个棋子的摆放位置与前面的棋 子不在同一行(或列)。接下来,我们只要判断当前位置是否还符合其他条件,如果符合,就遍历下一行(或列)所有位置,看看是否继续有符合条件的位置,以此 类推,如果某一个行(或列)的所有位置都不合适,就返回上一行(或列)继续该行(或列)的其他位置遍历,当我们顺利遍历到最后一行(或列),且有符合条件 的位置时,就是一个可行的8皇后摆放方案,累加一次八皇后可行方案的个数,然后继续遍历该行其他位置是否有合适的,如果没有,则返回上一行,遍历该行其他 位置,依此下去。这样一个过程下来,我们就可以得出所有符合条件的8皇后摆放方案了。这是递归思路。

接下来,我们以逐列遍历,具体到代码,进一步说明。首先,从第一列开始找第一颗棋子的合适位置,我们知道,此时第一列的任何一个位置都是合适的,当棋子找 到第一个合适的位置后,就开始到下一列考虑下一个合适的位置,此时,第二列的第一行及第二行显然就不能放第二颗棋子了,因为其与第一个棋子一个同在一行, 一个同在一条斜线上。第二列第三行成为第二列第一个合适的位置,以此类推,第三列的第5行又会是一个合适位置,这个过程中,我们注意到,每一列的合适位置 都是受到前面几列的位置所影响,假设前面1列的棋子放在第3行,那当前列不能放的位置就一定是3行,2行,4行。例如用cols数组来表示8个列棋子所放的行数,数组下标从0开始,其中数组下标表示列数,数组的元素值表示该列棋子所在行数,当前列为N(N>=0,N<8),则:

cols[N] != cols[N-1]

cols[N] != cols[N-1]-1

cols[N]!=cols[N-1]+1

如果N-2列存在的话,那么我们还要考虑当前列N不与N-2列的棋子同行,同斜线,同反斜线。把当前列N的前面的某一列设为m,则m的所有取值为{m>=0,m

cols[N] != cols[m]

cols[N] != cols­­[m] -(N-m)

cols[N] != cols­­[m] + (N-m)  具体代码如下:

八皇后java_八皇后(JAVA算法实现)相关推荐

  1. 128位java_求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救!...

    求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救! 关注:157  答案:1  mip版 解决时间 2021-02-03 09:1 ...

  2. 2022-07-15 第八组 于凤琳 Java算法+数据结构

    一,算法 二,数据结构 数组:最基本的数据结构,是一张表,线性表(数据元素之间是一对一的关系 除了第一个和最后一个之外,其余的元素都是首尾连接). 链表: 树: 图: 三,查找算法-线性查找 例题1: ...

  3. 地图格子 java_地图纠偏java算法

    package com.hgq.correct; /** * 经纬度纠偏工具类 * [一句话功能简述] * [功能详细描述] * @author PeiYu * @version 1.0, 2012- ...

  4. Java实现递归回溯,解决八皇后问题,数据结构与算法

    文章目录 八皇后问题 解决思路 代码实现 运行结果 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆 ...

  5. 八皇后问题分析与Java实现

    原文链接:传送门 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即: ...

  6. 算法实验二 【八皇后问题】(回溯算法)

    算法实验二 [八皇后问题](回溯算法) 1007.8皇后问题 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 输出8皇后问题所有结果. 输入 没有输入. 输出 每个结果第一行是 ...

  7. 【恋上数据结构】回溯、剪枝(八皇后、n皇后)、LeetCode51.N皇后、LeetCode52.N皇后 II

    回溯 回溯(Back Tracking) 提出八皇后问题(Eight Queens) 初步思路一:暴力出奇迹 初步思路二:根据题意减少暴力程度 初步思路三:回溯法(回溯+剪枝) 四皇后 - 回溯法图示 ...

  8. 八十八、Python | 十大排序算法系列(下篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  9. 回溯算法n皇后问题_使用回溯算法的N Queen问题和解决方案

    回溯算法n皇后问题 N-皇后问题 (N - Queen's problem) The n – queen problem is the generalized problem of 8-queens ...

最新文章

  1. LeetCode简单题之找出数组的最大公约数
  2. ant-design-pro Login 组件 实现 rules 验证
  3. Protobuf 的 proto3 与 proto2 的区别
  4. Android Studio的Gradle插件文档
  5. Linux中rename和mv命令用法学习修改文件名区别和总结
  6. html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
  7. php针探,php针探代码,这款针探可以检测你机器的(1/7)
  8. [codevs 1503]愚蠢的宠物(特殊的LCA)
  9. 华为三层交换机之基本操作
  10. java velocity 语法_Velocity 语法
  11. python元组操作_python元组操作
  12. OVM虚拟化开启公测,支持Docker全新体验!
  13. recover的用法
  14. KVM切换器如何选购
  15. 要点初见:Stable Diffusion NovelAI模型优质文字Tag汇总与实践【魔咒汇总】
  16. 主力用计算机吸筹,主力底部吸筹 副图
  17. 华硕天选2键盘背光灯切换颜色
  18. ModbusPoll和ModbusSlave使用(搭配VSPD,串口接收发数据)
  19. 在计算机中 汉字系统把一个汉字表示为,计算机问题汉字系统在计算机内把一个汉字表示 – 手机爱问...
  20. 2种简易方法求100以内的素数(质数)

热门文章

  1. Linux脚本命令万能手脚架整理
  2. 吉布斯效应(Gibbs)、振铃(ring)现象和块效应(Blocking Artifact)
  3. 哈夫曼树构造算法的实现
  4. Centos7 安装ELK/EFK 7.x 集群搭建实战攻略
  5. JAVA基础学习---Markdown
  6. OpenCV4.3 Java 编程入门:图像直方图
  7. 访问者模式(例子+类图+实现)
  8. AI落地项目一:量化交易
  9. 在控制台 在网页 输出特殊符号 Unicod编码
  10. 标准员报考建筑八大员报考建筑标准员施工现场标准化管理的思路