八皇后问题python实现
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。
具体可以参考:https://github.com/chenqiangzhishen/Python/blob/master/pythonAlgorithms/eightQueens.py
代码参考《python编程基础》
import random
#冲突检查,在定义state时,采用state来标志每个皇后的位置,其中索引用来表示横坐标,基对应的值表示纵坐标,例如: state[0]=3,表示该皇后位于第1行的第4列上
def conflict(state, nextX):nextY = len(state)for i in range(nextY):#如果下一个皇后的位置与当前的皇后位置相邻(包括上下,左右)或在同一对角线上,则说明有冲突,需要重新摆放if abs(state[i]-nextX) in (0, nextY-i):return Truereturn False#采用生成器的方式来产生每一个皇后的位置,并用递归来实现下一个皇后的位置。
def queens(num, state=()):for pos in range(num):if not conflict(state, pos):#产生当前皇后的位置信息if len(state) == num-1:yield (pos, )#否则,把当前皇后的位置信息,添加到状态列表里,并传递给下一皇后。else:for result in queens(num, state+(pos,)):yield (pos, ) + result#为了直观表现棋盘,用X表示每个皇后的位置
def prettyprint(solution):def line(pos, length=len(solution)):return '. ' * (pos) + 'X ' + '. '*(length-pos-1)for pos in solution:print line(pos)if __name__ == "__main__":prettyprint(random.choice(list(queens(8))))
最后随机打印出符合规则的皇后如下所示:
八皇后问题python实现相关推荐
- 递归算法——八皇后问题 python
研究了一下午的八皇后算法,可算是搞明白了,为了避免以后忘记,还是写个博客吧!可能会跟其他文章有相似之处,最终还是希望能好好学习算法,都是经过自己思考后亲自写的代码,虽然过程比较艰难,我写了很多注释. ...
- 八皇后问题python实现_八皇后问题的python实现
以前写的一个八皇后问题求解,思路就是每次循环列出所有的可能解,然后过滤出不符合要求的解.详细见代码: //检查两个点是否在攻击线上 def attack(p1,p2): return p1[0]==p ...
- 八皇后问题python_八皇后问题Python实现
八皇后问题描述 问题: 国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子.皇后这种棋子可以攻击同一行或者同一列或者斜线(左上左下右上右下四个方向)上的棋子.在一个棋盘上如果要放八个皇后,使得她们互 ...
- 八皇后问题python回溯_解决Python基于回溯法子集树模板实现8皇后问题
这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下 本文实例 ...
- LeetCode —— 面试题 08.12. 八皇后(Python)
设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行.不同列,也不在对角线上.这里的"对角线"指的是所有的对角线,不只是平分整个棋盘的那两条对角线. ...
- C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...
- 带你轻而易举的学习python——八皇后问题
首先我们来看一下这个著名的八皇后问题 八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 在这个问题提出之后人们又将 ...
- Python解决八皇后问题
Python解决八皇后问题 参考文章: (1)Python解决八皇后问题 (2)https://www.cnblogs.com/littleseven/p/5362791.html 备忘一下.
- Python实现八皇后问题所有实现方式
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...
最新文章
- usaco Home on the Range
- 我的hadoop学习之路
- AI赋能,让无人系统更智能
- Fedora 17安装NVIDIA显卡驱动
- Android 屏幕录制GIF脚本
- Android 自定义 View 中 onKeyDown监听 没反应
- linux内核模块开发
- CSS基础(part11)--盒子模型之内边距
- python自动化运维快速入门-Python自动化运维快速入门
- winform响应时间最长是多少分钟_史上最短职业赛是多少时间?《王者荣耀》中国队只花了三分钟...
- Android歌词转换器(支持动感歌词相互转换)
- win10PPT不支持Flash动画
- css3实现图片旋转木马效果
- 【优化模型】推销员问题模型
- 基于STM32+0.96寸OLED - - 7脚SPI接线显示+代码解析
- 【本周学习】光学字符识别(OCR)
- Android 添加Flutter 项目依赖
- 【NOIP2006PJ】开心的金明(happy)
- 点心、MIUI、乐众OS架构师讲Android底层故事
- 手把手教你提交Jar包到Maven公共仓库