八皇后规则:任意两个棋子都不能处于同一行、同一列或同一斜线上

分析:(下面 将要放的棋子用a表示,已经放下的棋子用b表示)

一、横轴不重复

横轴不重复,也就是说水平方向只能有一个棋子 :所以我们可以采取一行一行放,这样一定是不重复的

二、纵轴不重复

纵轴不重复,也就是说垂直方向只能有一个棋子。那么,放下的棋子(这里用a表示)与已经放下的棋子(这里用b表示)两者               的y轴相比,不相等说明竖着没有重复

三、斜着不重复

斜着不重复,每条斜线只能有一个棋子。这个实际上比较的是a到b的水平方向和a到b的垂直方向相等就是斜向(相当于ab为边长的正方形的对角线),最终用公式表示:ax-bx = ay-by 只要保证ax-bx 不等于 ay-by 就可以了

下面代码演示:

先实现2,3步 的函数,用一个数组arr表示已经放入的所有棋子,将要放的棋子为a,如果条件符合为true,反之为false。

const arr = []
function fn (ax, ay) {for (let i = 1; i < ax; i++) {if (ay === arr[i-1].y || Math.abs(ax - arr[i-1].x) === Math.abs(ay - arr[i-1].y)) return false}return true
}

其次,实现按行尝试放棋子 row:将要放的第几行  n:能放置的行数与列数

const n = 8
function ab (row) {if (row > n) console.log(arr.map(item => item.y)) // 这里的n是行for (let i = 1; i <= n; i++) {                     // 这里的n是列// 若是第一个棋子直接进入下一行if (row === 1 || fn(row, i)) {arr[row-1] = {x: row, y: i}ab(row + 1)}}
}

最后,执行

ab(1)

结果,92种

游戏玩完了。现在说一下解决的这种算法:回溯算法

回溯算法

https://baike.baidu.com/item/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95/9258495?fr=aladdin

百度百科这么解释:

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

上面八皇后的游戏就是如此,一行一行,一列一列的尝试放下棋子,当符合条件就尝试去下一行放下棋子,反之,尝试放下当前行的下一列继续尝试!

按照自己的理解用js实现八皇后的算法相关推荐

  1. 八皇后BFS算法、DFS算法、A*算法代码理解

    代码参考了Python:DFS/BFS/UCS解决八皇后问题_流动的风与雪的博客-CSDN博客 和Python:GBF/A*算法解决八皇后问题_流动的风与雪的博客-CSDN博客 但是我花了两天时间才看 ...

  2. 八皇后回溯算法原理剖析及其JS实现

    八皇后回溯算法(JS实现) 八皇后算法描述如下: 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法! 下面来分析一波,假设此时我 ...

  3. 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)

    转换视角,提炼共性 有时算法本身乍一看是不一样的,而且很不一样,比较结构特点,看不出来有什么共性 如果我们转换下看问题的视角,是否能够找到共性呢 1 ) 对比分书问题和八皇后问题 这两个问题,其实差异 ...

  4. 程序员面试题精选100题(58)-八皇后问题[算法]

    题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行.同一列或者同一对角斜线上.下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法.请求出总共有多少种摆法 ...

  5. 八皇后 拉斯维加斯算法

    拉斯维加斯算法的一个显著特征就是它所做的随机性决策有可能导致算法找不到所需的解.因此常用一个bool型函数表示拉斯维加斯算法.找到解就返回true,否则返回false. n后问题典型的有回溯法(n后问 ...

  6. java计算八皇后_八皇后java算法

    public class NQueens {  public static int num = 0; // 累计方案总数 public static final int MAXQUEEN = 5;// ...

  7. 十二、八皇后问题(递归回溯)

    一.八皇后问题介绍 (本次使用回溯算法解决,之后会用贪心算法优化) 在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行. 同一列或同一斜线上,问有多少种摆法(9 ...

  8. 数据结构 - 递归 回溯算法(八皇后问题)

    游戏地址自己写完了可以根据结果去测试一下. 算法分析 八皇后问题算法思路分析 1)第一个皇后先放第一行第一列 2)第二个皇后放在第二行第一列.然后判断是否OK, 如果不OK,继续放在.第二列.第三列. ...

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

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

最新文章

  1. 【Web安全】XSS简介与XSS测试平台截取用户COOKIE的探索
  2. Ueeidor 使用
  3. 找出一批正整数中的最大偶数_正整数的性质 B6,C1
  4. HP_UX常用指令列表(转,整理过,方便使用)
  5. java oracle数据库连接代码,java连接oracle数据库代码实例(注释详解)
  6. 走进COM组件系列(三)
  7. 搭建MHA时 yum 安装perl模块提示 baseurl 错误
  8. 最详细!!!软考:初级程序员—思维导图
  9. 经典遗传算法及MATLAB实例
  10. 计算机论文格式要求吗,论文格式
  11. OBS直播如何连麦和多人连麦
  12. 打印机服务器属性纸张自动改,“打印机设置自定义纸张”的解决方案
  13. go语言爬虫 - TapTap用户都喜欢些什么游戏
  14. mysql设置密码错误修改步骤
  15. Table表格边框线、样式
  16. 随机矩阵stochastic matrix和双随机矩阵 doubly stochastic matrix 和bistochastic matrix
  17. 手机html在哪个文件里,手机相册在哪个文件夹,教您手机图片存放在哪里
  18. 对比LDA,NCA,PCA
  19. 最新版华美淘客商城淘宝客程序源码
  20. 【Unity3D】Tank大战

热门文章

  1. 手机很早就有飞行模式了,为什么最近几年坐飞机才不用关机?
  2. “不会Linux,怎么当程序员?”面试官:等着被淘汰吧!
  3. 如何攻克 C++ 中复杂的类型转换?
  4. 1.2w星!火爆GitHub的Python学习100天刷爆朋友圈!
  5. 不了解这些“高级货”,活该面试当炮灰......
  6. 漫画:如何给女朋友解释什么是系统可用性?| 技术头条
  7. 腾讯掌舵者马化腾,才是移动互联网的大功臣?
  8. 一文看懂 BDTC 2018:探秘大数据新应用(附 PPT 下载)
  9. linux下进程的创建代码,伪代码说明Linux进程创建过程
  10. 学了阿里P8级架构师的7+1+1落地项目,转疯了!