python8皇后不攻击问题_python 八皇后问题的解法(深度搜索)
共本文介绍如何用深度搜索的方式求解8皇后(其实也可以求解N皇后)问题的解
八皇后问题描述
在国际想起的规则中,皇后能攻击八个方向上的棋子,而且不受距离限制。
皇后的攻击方向如下图所示:
八皇后问题则是在这样的规则上,求在一个8*8的棋盘上,如何放置8个互相不会攻击的皇后。
比如下图这样放置:
8个皇后,每个都不在其他皇后的上下左右以及斜向的方向上,所以互相不能攻击。
ps:我写的这份代码其实也可以求N皇后问题的解,只需修改MAXNUM为指定N值即可
代码原理
从棋盘的第一行开始,从左到右的查看每一列,当检测到当前点可以放置皇后,则将该点置为1。
然后查找下一行可以放置皇后的点,寻找的方式也是从左到右的每一列检查,找到后继续找下下一行,直到最后一行,打印此时的棋盘,这代表一个解。
然后回到第一行,遍历下一列,重复上面的过程,直到第一行的每一列都遍历完成。
很明显,这是一次深度搜索的过程,每次找到最后一行的皇后放置位置,就代表找到一个解,把当前的棋盘打印出来即可。
ps:每次查找完当前位置后,记得要将当前位置重新置为0,以供接下来的循环继续寻找其他解
源码
运行结果
求解八皇后,共92个答案(这是不考虑棋盘的对称性的答案数目,如果考虑棋盘的对称性,甚至棋盘的中轴对称的话,数目会少很多):
求解四皇后,共2个答案(这两个答案其实就是对称的):
python8皇后不攻击问题_python 八皇后问题的解法(深度搜索)相关推荐
- python8皇后不攻击问题_Python八皇后问题(落最后一颗子)
最近在看Python基础,遇到了八皇后问题,看得整个人晕晕乎乎,甚至开始怀疑人生. 问题是在一个8*8的国际象棋棋盘上摆放8个皇后,问题一是找出一个解,问题二是问有多少个解.这里我把我自己的理解写出来 ...
- Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案
7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...
- 八皇后加强版:每个皇后最多攻击一个其它的皇后
想必搞OI/ACM的朋友都应该知道八皇后问题,这是学习编程的必修课程之一:在国际象棋棋盘上最多可以放置多少个互不攻击的皇后(皇后可以攻击它所在的行.列.对角线方向上的棋子)?显然,能够放置的皇后数不超 ...
- 八皇后问题python实现_八皇后问题的python实现
以前写的一个八皇后问题求解,思路就是每次循环列出所有的可能解,然后过滤出不符合要求的解.详细见代码: //检查两个点是否在攻击线上 def attack(p1,p2): return p1[0]==p ...
- 你知道八皇后嘛?就是那个八皇后
说起八皇后,其实这是一个古老而著名的问题.该问题是19世纪著名的数学家高斯1850年提出:在一个8*8国际象棋盘上,有8个皇后,每个皇后占一格:要求皇后之间不会出现相互"攻击"的现 ...
- 88皇后问题C语言程序设计,八皇后问题--C语言程序设计.pdf
八皇后问题 学 2012年 9 月 5 日 目录 一.选题 1.1背景知识---------------------------2 1.2设计目的与要求------------------------ ...
- java中经典八皇后难题_Java实现经典八皇后的问题
今天自己实现了八皇后的问题,其实代码并不长,但是关于虚拟机中怎样实现的想了好长时间特别是红色部分.现在还是有点不是很明白.代码如下,已经实现运行. public class EightQueen { ...
- 八皇后问题c语言循环,八皇后问题的12组解
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define N 8 /*皇后数*/ typedef int bool; rot(char d[ ],char s[ ...
- 八数码c语言编程深度搜索,广度优先搜索解 八数码, 求意见, 求bug/
已结贴√ 问题点数:100 回复次数:31 广度优先搜索解 , 求意见, 求bug/ 我得去买票了,.... #include #include #include #define NUM 5 type ...
最新文章
- Qt OpenCV Win10环境配置
- JS数组去重的6种算法实现
- python读数据-python读取各种文件数据方法解析
- 3.9 YOLO算法-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 检测到目标服务器启用了trace方法_综述:目标检测中的多尺度检测方法
- 零起点学算法 3个数比较大小
- 感恩被救赎——爱是恒久忍耐
- 题解 UVA10328 【Coin Toss】
- mysql设置表名字为占位符_这可能是把MySQL存储引擎讲解的最清楚的一篇文章了
- 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty
- 全量增长模型-指标体系的构建及应用实战案例解析
- vs2015软件系统开源_2015年开源亮点的多样性
- Paros工具使用操作手册
- Notification使用详解之一:基础应用
- 计算器计算经纬距离_经纬距离计算器下载_经纬距离计算器官方下载-太平洋下载中心...
- Git Windows下载安装详细教程
- python改变当前工作目录_在python中更改当前工作目录
- sofa-jraft源码学习
- 基于开源软件打造企业网络安全
- 20吉大计算机/软件考研经验贴!