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的Django框架中的ORM建立查询API
Apr 20 Python
一文总结学习Python的14张思维导图
Oct 17 Python
python先序遍历二叉树问题
Nov 10 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
python实现海螺图片的方法示例
May 12 Python
Python中模块(Module)和包(Package)的区别详解
Aug 07 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
python实现信号时域统计特征提取代码
Feb 26 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Python实现机器学习算法的分类
Jun 03 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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
缅甸的咖啡简史
2021/03/04 咖啡文化
PHP 采集程序 常用函数
2008/12/18 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
带你快速理解javascript中的事件模型
2017/08/14 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
深入理解react-router 路由的实现原理
2018/09/26 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
销售代表求职自荐信
2013/10/01 职场文书
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
cf收人广告词大全
2014/03/14 职场文书
公司授权委托书范本
2014/04/03 职场文书
工程索赔意向书
2014/08/30 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
对学校的意见和建议
2015/06/04 职场文书
天气温馨提示语
2015/07/14 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers