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之禅》中对于Python编程过程中的一些建议
Apr 03 Python
Python实现文件复制删除
Apr 19 Python
pandas多级分组实现排序的方法
Apr 20 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
基于python中theano库的线性回归
Aug 31 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
详解python解压压缩包的五种方法
Jul 05 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
python实现超市商品销售管理系统
Nov 22 Python
python redis 批量设置过期key过程解析
Nov 26 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
常用的10个Python实用小技巧
2020/08/10 Python
联想德国官网:Lenovo Germany
2018/07/04 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
残疾人小组计划书
2014/04/27 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
有关西游记的读书笔记
2015/06/25 职场文书