共本文介绍如何用深度搜索的方式求解8皇后(其实也可以求解N皇后)问题的解

八皇后问题描述

在国际想起的规则中,皇后能攻击八个方向上的棋子,而且不受距离限制。

皇后的攻击方向如下图所示:

八皇后问题则是在这样的规则上,求在一个8*8的棋盘上,如何放置8个互相不会攻击的皇后。

比如下图这样放置:

8个皇后,每个都不在其他皇后的上下左右以及斜向的方向上,所以互相不能攻击。

ps:我写的这份代码其实也可以求N皇后问题的解,只需修改MAXNUM为指定N值即可

代码原理

从棋盘的第一行开始,从左到右的查看每一列,当检测到当前点可以放置皇后,则将该点置为1。

然后查找下一行可以放置皇后的点,寻找的方式也是从左到右的每一列检查,找到后继续找下下一行,直到最后一行,打印此时的棋盘,这代表一个解。

然后回到第一行,遍历下一列,重复上面的过程,直到第一行的每一列都遍历完成。

很明显,这是一次深度搜索的过程,每次找到最后一行的皇后放置位置,就代表找到一个解,把当前的棋盘打印出来即可。

ps:每次查找完当前位置后,记得要将当前位置重新置为0,以供接下来的循环继续寻找其他解

源码

运行结果

求解八皇后,共92个答案(这是不考虑棋盘的对称性的答案数目,如果考虑棋盘的对称性,甚至棋盘的中轴对称的话,数目会少很多):

求解四皇后,共2个答案(这两个答案其实就是对称的):

python8皇后不攻击问题_python 八皇后问题的解法(深度搜索)相关推荐

  1. python8皇后不攻击问题_Python八皇后问题(落最后一颗子)

    最近在看Python基础,遇到了八皇后问题,看得整个人晕晕乎乎,甚至开始怀疑人生. 问题是在一个8*8的国际象棋棋盘上摆放8个皇后,问题一是找出一个解,问题二是问有多少个解.这里我把我自己的理解写出来 ...

  2. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案

    7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...

  3. 八皇后加强版:每个皇后最多攻击一个其它的皇后

    想必搞OI/ACM的朋友都应该知道八皇后问题,这是学习编程的必修课程之一:在国际象棋棋盘上最多可以放置多少个互不攻击的皇后(皇后可以攻击它所在的行.列.对角线方向上的棋子)?显然,能够放置的皇后数不超 ...

  4. 八皇后问题python实现_八皇后问题的python实现

    以前写的一个八皇后问题求解,思路就是每次循环列出所有的可能解,然后过滤出不符合要求的解.详细见代码: //检查两个点是否在攻击线上 def attack(p1,p2): return p1[0]==p ...

  5. 你知道八皇后嘛?就是那个八皇后

    说起八皇后,其实这是一个古老而著名的问题.该问题是19世纪著名的数学家高斯1850年提出:在一个8*8国际象棋盘上,有8个皇后,每个皇后占一格:要求皇后之间不会出现相互"攻击"的现 ...

  6. 88皇后问题C语言程序设计,八皇后问题--C语言程序设计.pdf

    八皇后问题 学 2012年 9 月 5 日 目录 一.选题 1.1背景知识---------------------------2 1.2设计目的与要求------------------------ ...

  7. java中经典八皇后难题_Java实现经典八皇后的问题

    今天自己实现了八皇后的问题,其实代码并不长,但是关于虚拟机中怎样实现的想了好长时间特别是红色部分.现在还是有点不是很明白.代码如下,已经实现运行. public class EightQueen { ...

  8. 八皇后问题c语言循环,八皇后问题的12组解

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define N 8 /*皇后数*/ typedef int bool; rot(char d[ ],char s[ ...

  9. 八数码c语言编程深度搜索,广度优先搜索解 八数码, 求意见, 求bug/

    已结贴√ 问题点数:100 回复次数:31 广度优先搜索解 , 求意见, 求bug/ 我得去买票了,.... #include #include #include #define NUM 5 type ...

最新文章

  1. Qt OpenCV Win10环境配置
  2. JS数组去重的6种算法实现
  3. python读数据-python读取各种文件数据方法解析
  4. 3.9 YOLO算法-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  5. 检测到目标服务器启用了trace方法_综述:目标检测中的多尺度检测方法
  6. 零起点学算法 3个数比较大小
  7. 感恩被救赎——爱是恒久忍耐
  8. 题解 UVA10328 【Coin Toss】
  9. mysql设置表名字为占位符_这可能是把MySQL存储引擎讲解的最清楚的一篇文章了
  10. 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty
  11. 全量增长模型-指标体系的构建及应用实战案例解析
  12. vs2015软件系统开源_2015年开源亮点的多样性
  13. Paros工具使用操作手册
  14. Notification使用详解之一:基础应用
  15. 计算器计算经纬距离_经纬距离计算器下载_经纬距离计算器官方下载-太平洋下载中心...
  16. Git Windows下载安装详细教程
  17. python改变当前工作目录_在python中更改当前工作目录
  18. sofa-jraft源码学习
  19. 基于开源软件打造企业网络安全
  20. 20吉大计算机/软件考研经验贴!

热门文章

  1. 【MySQL】MySQL常见的读写分离方法
  2. 【Flink】Flink 自定义 trigger并且进行分析
  3. 【安全】Docker安装LDAP
  4. redis相对于mysql有什么劣势
  5. 都是用Redis的服务器,12306为啥干不过淘宝???
  6. Hibernate框架原理及使用
  7. linux hal-get-property进程说明,Android HAL property_get() 函数用法
  8. 红帽 安装oracle11g,64位RedHat 5.6下安装Oracle 11g
  9. ssm配置文件引用细节
  10. 实现Runnable接口