八皇后问题是一个以国际象棋为背景的问题:如何能够在 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实现相关推荐

  1. 递归算法——八皇后问题 python

    研究了一下午的八皇后算法,可算是搞明白了,为了避免以后忘记,还是写个博客吧!可能会跟其他文章有相似之处,最终还是希望能好好学习算法,都是经过自己思考后亲自写的代码,虽然过程比较艰难,我写了很多注释. ...

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

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

  3. 八皇后问题python_八皇后问题Python实现

    八皇后问题描述 问题: 国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子.皇后这种棋子可以攻击同一行或者同一列或者斜线(左上左下右上右下四个方向)上的棋子.在一个棋盘上如果要放八个皇后,使得她们互 ...

  4. 八皇后问题python回溯_解决Python基于回溯法子集树模板实现8皇后问题

    这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下 本文实例 ...

  5. LeetCode —— 面试题 08.12. 八皇后(Python)

    设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行.不同列,也不在对角线上.这里的"对角线"指的是所有的对角线,不只是平分整个棋盘的那两条对角线. ...

  6. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  7. 带你轻而易举的学习python——八皇后问题

    首先我们来看一下这个著名的八皇后问题 八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 在这个问题提出之后人们又将 ...

  8. Python解决八皇后问题

    Python解决八皇后问题 参考文章: (1)Python解决八皇后问题 (2)https://www.cnblogs.com/littleseven/p/5362791.html 备忘一下.

  9. Python实现八皇后问题所有实现方式

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

最新文章

  1. usaco Home on the Range
  2. 我的hadoop学习之路
  3. AI赋能,让无人系统更智能
  4. Fedora 17安装NVIDIA显卡驱动
  5. Android 屏幕录制GIF脚本
  6. Android 自定义 View 中 onKeyDown监听 没反应
  7. linux内核模块开发
  8. CSS基础(part11)--盒子模型之内边距
  9. python自动化运维快速入门-Python自动化运维快速入门
  10. winform响应时间最长是多少分钟_史上最短职业赛是多少时间?《王者荣耀》中国队只花了三分钟...
  11. Android歌词转换器(支持动感歌词相互转换)
  12. win10PPT不支持Flash动画
  13. css3实现图片旋转木马效果
  14. 【优化模型】推销员问题模型
  15. 基于STM32+0.96寸OLED - - 7脚SPI接线显示+代码解析
  16. 【本周学习】光学字符识别(OCR)
  17. Android 添加Flutter 项目依赖
  18. 【NOIP2006PJ】开心的金明(happy)
  19. 点心、MIUI、乐众OS架构师讲Android底层故事
  20. 手把手教你提交Jar包到Maven公共仓库

热门文章

  1. 数据库四大特性ACID
  2. java+subject+login_Java Subject類代碼示例
  3. uni App 支付宝小程序分享代码
  4. SQL语法之 CHECK 约束
  5. 图像增强——伽马变换
  6. 写在2015农历年的最后以及2016农历年的开始
  7. 华为手机怎样才算激活了_华为手机开机激活,华为智能手机怎么激活?
  8. redis,memcached
  9. 利用百度地图采集大量某一区域经纬度信息
  10. 谈谈Word2Vec的CBOW模型