四皇后问题

在 n 行 n 列的国际象棋上摆放 n 个皇后,使其不能互相攻击(即任意两个皇后都不能处于同一行、同一列或同一斜线上)。请问有多少种摆法,以及如何摆放这些皇后。这就是经典的 n 皇后问题。如下图所示:


当 n=4 时就成为了四皇后问题。很明显,这种问题我们可以通过搜索技术来进行求解,例如深度优先搜索。

用回溯法,在构建解空间树的途中进行深度优先探索,当探索到某一种棋盘局部不是四皇后问题的解的时候(比如出现任意两个或两个以上的棋子在同一行/同一列/45度斜线上),就可以判断这个节点向下派生出的解空间树的节点也一定不是四皇后问题的解,这样就可以避免大量的无用功。

比如上图中第二行的第一个节点出现了两个棋子在同一斜线的情况,所以可以判断出这个节点以及这个节点向下派生出的所有节点就不再有必要进行遍历了,这样就会避免4+4×4次的完全无用功的遍历,就会大大的节省时间,再去探索第二行的第二个节点……其他的同理。

算法实现

实现找出所有可能的4皇后摆法。

预期输出:

第四:搜索算法应用 - 四皇后问题相关推荐

  1. 回溯法解决四皇后问题

    以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...

  2. 我的前端工具集(四)树状结构后篇

    我的前端工具集(四)树状结构后篇   liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 上文连接 我的前端工具集(四)树状结构前偏 1.数据组织 在3.2.节有截图 2.树状结构代码 2 ...

  3. 四个你看后可能会影响你一生的故事

    四个你看后可能会影响你一生的故事 1.误会 : 早年在美国阿拉斯加地方,有一对年轻人结婚,婚后生育,他的太太因难产而死,遗下一孩子. 他忙生活,又忙于看家,因没有人帮忙看孩子,就训练一只狗,那狗聪明听 ...

  4. 四皇后、八皇后……的求解

    我也不知道自己写对了没有,感觉是对的: #include <stdio.h> #include <stdlib.h> #include <strings.h> #d ...

  5. 数仓面试|四个在工作后才知道的SQL密技

    SQL是大数据从业者的必备技能,大部分的大数据技术框架也都提供了SQL的解决方案.可以说SQL是一种经久不衰.历久弥新的编程语言.尤其是在数仓领域,使用SQL更是家常便饭.本文会分享四个在面试和工作中 ...

  6. sql order by 降序_数仓面试|四个在工作后才知道的SQL密技

    SQL是大数据从业者的必备技能,大部分的大数据技术框架也都提供了SQL的解决方案.可以说SQL是一种经久不衰.历久弥新的编程语言.尤其是在数仓领域,使用SQL更是家常便饭.本文会分享四个在面试和工作中 ...

  7. 数据与广告系列二十四:效果广告后定向时代如何逆流而上

    作者·黄崇远 『数据虫巢』 全文共4338字 题图ssyer.com " 在效果广告的发展历程中,当前已经处于后定向时代,或者说是弱定向时代,我们是应该顺应潮流还是应该逆流而上?" ...

  8. ps修图之——四步去修图后的毛边

    PS修图时,多数PS工具都会在图片的边源处留下很多毛边如下图: 这个时候很多新手店主会非常苦脑,会退回原始图片上反复修图起图.可是结果也不怎么满意,当然也许有些店主会有其它方法. 其实不用那么麻烦,只 ...

  9. Hive SQL: 四个在工作后才知道的SQL密技

    SQL是大数据从业者的必备技能,大部分的大数据技术框架也都提供了SQL的解决方案.可以说SQL是一种经久不衰.历久弥新的编程语言.尤其是在数仓领域,使用SQL更是家常便饭.本文会分享四个在面试和工作中 ...

  10. 四种保留小数后两位输出方法

    四舍五入:结果虽保留了两位,但四舍五入了 double d = 114.145; d = (double) Math.round(d * 100) / 100; System.out.println( ...

最新文章

  1. Java数据类型缓存池
  2. C# 基于密钥的64位加密与解密方法(原创)
  3. QT - 内存泄漏检测
  4. 最短路径——SPFA算法(蓝桥杯试题集)
  5. STM32F103_RGB彩灯
  6. Ubuntu 15 周年!
  7. bootlogo画面制作和替换
  8. a form 出口享惠情况_关税聚焦 | 报关单“出口享惠情况”填报解读
  9. BOLT UI界面引擎是如何工作的?(BOLT UI入门教程)
  10. mac电脑有很多._开头的文件
  11. 苹果手机如何换行打字_苹果手机如何检查手机是否是真机
  12. shift+右键,没有“在此处打开命令窗口”选项
  13. 科普系列:AUTOSAR与OSEK网络管理比较(下)
  14. 个人介绍静态网页【附源码】初学者的期中作业
  15. 一文弄懂数据结构中的红黑树、二叉树
  16. 下载kafka安装包
  17. 腾讯王巨宏:拥抱开源是这个时代开发者应该具备的思维和能力
  18. Fast Normalized Cross-Correlation
  19. Ubuntu 19.10 安装 美化 优化 conky Docker
  20. match在java中文翻译_match是什么意思_match翻译_读音_用法_翻译

热门文章

  1. linux 文件系统简介
  2. Delphi7中默认没有安装的官方控件
  3. GridView中 选中checkbox,在上下页 保存选中的值
  4. 牛客练习赛52 C 烹饪(容斥+扩展欧几里得)
  5. 网上的tensorflow和cnn教程汇总
  6. css3兼容IE8的方案 各个ie的hack
  7. ajax 调用asp.net后台方法
  8. shell中exec命令
  9. Java日期与时间的处理/Date,String,Calendar转换
  10. 使用tc对linux中某ip段限速