Python基于生成器迭代实现的八皇后问题示例


Posted in Python onMay 23, 2018

本文实例讲述了Python基于生成器迭代实现的八皇后问题。分享给大家供大家参考,具体如下:

问题:有一个棋盘和8个要放到上面的皇后,唯一的要求是皇后之间不能形成威胁。也就是说,必须把他们防止成每个皇后都不能吃掉其他皇后的状态。

# -*- coding: utf-8 -*-
#python 2.7.13
__metaclass__ = type
def confict(state, nextX):
  nextY = len(state)
  for i in range(nextY):
    if abs(state[i] - nextX) in (0, nextY - i):
      return True
  return False
def queens(num=8, state=()):
  for pos in range(num):
    if not confict(state, pos):
      if len(state) == num -1:
        yield (pos,)
      else:
        for result in queens(num, state + (pos,)):
          yield (pos,) + result
print list(queens()) #打印输出

运行结果:

[(0, 4, 7, 5, 2, 6, 1, 3), (0, 5, 7, 2, 6, 3, 1, 4), (0, 6, 3, 5, 7, 1, 4, 2), (0, 6, 4, 7, 1, 3, 5, 2), (1, 3, 5, 7, 2, 0, 6, 4), (1, 4, 6, 0, 2, 7, 5, 3), (1, 4, 6, 3, 0, 7, 5, 2), (1, 5, 0, 6, 3, 7, 2, 4), (1, 5, 7, 2, 0, 3, 6, 4), (1, 6, 2, 5, 7, 4, 0, 3), (1, 6, 4, 7, 0, 3, 5, 2), (1, 7, 5, 0, 2, 4, 6, 3), (2, 0, 6, 4, 7, 1, 3, 5), (2, 4, 1, 7, 0, 6, 3, 5), (2, 4, 1, 7, 5, 3, 6, 0), (2, 4, 6, 0, 3, 1, 7, 5), (2, 4, 7, 3, 0, 6, 1, 5), (2, 5, 1, 4, 7, 0, 6, 3), (2, 5, 1, 6, 0, 3, 7, 4), (2, 5, 1, 6, 4, 0, 7, 3), (2, 5, 3, 0, 7, 4, 6, 1), (2, 5, 3, 1, 7, 4, 6, 0), (2, 5, 7, 0, 3, 6, 4, 1), (2, 5, 7, 0, 4, 6, 1, 3), (2, 5, 7, 1, 3, 0, 6, 4), (2, 6, 1, 7, 4, 0, 3, 5), (2, 6, 1, 7, 5, 3, 0, 4), (2, 7, 3, 6, 0, 5, 1, 4), (3, 0, 4, 7, 1, 6, 2, 5), (3, 0, 4, 7, 5, 2, 6, 1), (3, 1, 4, 7, 5, 0, 2, 6), (3, 1, 6, 2, 5, 7, 0, 4), (3, 1, 6, 2, 5, 7, 4, 0), (3, 1, 6, 4, 0, 7, 5, 2), (3, 1, 7, 4, 6, 0, 2, 5), (3, 1, 7, 5, 0, 2, 4, 6), (3, 5, 0, 4, 1, 7, 2, 6), (3, 5, 7, 1, 6, 0, 2, 4), (3, 5, 7, 2, 0, 6, 4, 1), (3, 6, 0, 7, 4, 1, 5, 2), (3, 6, 2, 7, 1, 4, 0, 5), (3, 6, 4, 1, 5, 0, 2, 7), (3, 6, 4, 2, 0, 5, 7, 1), (3, 7, 0, 2, 5, 1, 6, 4), (3, 7, 0, 4, 6, 1, 5, 2), (3, 7, 4, 2, 0, 6, 1, 5), (4, 0, 3, 5, 7, 1, 6, 2), (4, 0, 7, 3, 1, 6, 2, 5), (4, 0, 7, 5, 2, 6, 1, 3), (4, 1, 3, 5, 7, 2, 0, 6), (4, 1, 3, 6, 2, 7, 5, 0), (4, 1, 5, 0, 6, 3, 7, 2), (4, 1, 7, 0, 3, 6, 2, 5), (4, 2, 0, 5, 7, 1, 3, 6), (4, 2, 0, 6, 1, 7, 5, 3), (4, 2, 7, 3, 6, 0, 5, 1), (4, 6, 0, 2, 7, 5, 3, 1), (4, 6, 0, 3, 1, 7, 5, 2), (4, 6, 1, 3, 7, 0, 2, 5), (4, 6, 1, 5, 2, 0, 3, 7), (4, 6, 1, 5, 2, 0, 7, 3), (4, 6, 3, 0, 2, 7, 5, 1), (4, 7, 3, 0, 2, 5, 1, 6), (4, 7, 3, 0, 6, 1, 5, 2), (5, 0, 4, 1, 7, 2, 6, 3), (5, 1, 6, 0, 2, 4, 7, 3), (5, 1, 6, 0, 3, 7, 4, 2), (5, 2, 0, 6, 4, 7, 1, 3), (5, 2, 0, 7, 3, 1, 6, 4), (5, 2, 0, 7, 4, 1, 3, 6), (5, 2, 4, 6, 0, 3, 1, 7), (5, 2, 4, 7, 0, 3, 1, 6), (5, 2, 6, 1, 3, 7, 0, 4), (5, 2, 6, 1, 7, 4, 0, 3), (5, 2, 6, 3, 0, 7, 1, 4), (5, 3, 0, 4, 7, 1, 6, 2), (5, 3, 1, 7, 4, 6, 0, 2), (5, 3, 6, 0, 2, 4, 1, 7), (5, 3, 6, 0, 7, 1, 4, 2), (5, 7, 1, 3, 0, 6, 4, 2), (6, 0, 2, 7, 5, 3, 1, 4), (6, 1, 3, 0, 7, 4, 2, 5), (6, 1, 5, 2, 0, 3, 7, 4), (6, 2, 0, 5, 7, 4, 1, 3), (6, 2, 7, 1, 4, 0, 5, 3), (6, 3, 1, 4, 7, 0, 2, 5), (6, 3, 1, 7, 5, 0, 2, 4), (6, 4, 2, 0, 5, 7, 1, 3), (7, 1, 3, 0, 6, 4, 2, 5), (7, 1, 4, 2, 0, 6, 3, 5), (7, 2, 0, 5, 1, 4, 6, 3), (7, 3, 0, 2, 5, 1, 6, 4)]

输出列表长度:

print len(list(queens()))# 输出:92

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 提取文件的小程序
Jul 29 Python
python关闭windows进程的方法
Apr 18 Python
python对DICOM图像的读取方法详解
Jul 17 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
numpy返回array中元素的index方法
Jun 27 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
用python3读取python2的pickle数据方式
Dec 25 Python
Python装饰器实现方法及应用场景详解
Mar 26 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
python中可以声明变量类型吗
Jun 18 Python
Pycharm 操作Django Model的简单运用方法
May 23 #Python
PyCharm代码格式调整方法
May 23 #Python
创建pycharm的自定义python模板方法
May 23 #Python
对Python中9种生成新对象的方法总结
May 23 #Python
使用pycharm生成代码模板的实例
May 23 #Python
pycharm设置注释颜色的方法
May 23 #Python
解决pycharm界面不能显示中文的问题
May 23 #Python
You might like
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
python简易远程控制单线程版
2018/06/20 Python
opencv python如何实现图像二值化
2020/02/03 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
通过cmd进入python的步骤
2020/06/16 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
全国道德模范事迹
2014/02/01 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
财务主管岗位职责
2014/02/28 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
教师个人成长总结
2015/02/11 职场文书
人事聘任通知
2015/04/21 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python