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中非常实用的一些功能和函数分享
Feb 14 Python
Python基于DES算法加密解密实例
Jun 03 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
python抖音表白程序源代码
Apr 07 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
python数据分析之用sklearn预测糖尿病
Apr 22 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
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
php获取系统变量方法小结
2015/05/29 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
Web开发之JavaScript
2012/03/29 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
Random 在 Python 中的使用方法
2018/08/09 Python
python 获取url中的参数列表实例
2018/12/18 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
保护环境建议书100字
2014/05/13 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Python实现生成bmp图像的方法
2021/06/13 Python
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript