python基于右递归解决八皇后问题的方法


Posted in Python onMay 25, 2015

本文实例讲述了python基于右递归解决八皇后问题的方法。分享给大家供大家参考。具体分析如下:

凡是线性回溯都可以归结为右递归的形式,也即是二叉树,因此对于只要求一个解的问题,采用右递归实现的程序要比回溯法要优美的多。

def Test(queen,n):
 '''这个就不用说了吧,就是检验第n(下标,0-7)行皇后的位置是否合理'''
 q=queen[n]
 for i in xrange(n):
  if queen[i]==q or queen[i]-q==n-i or queen[i]-q==i-n:return False
 return True
def Settle(queen,n):
 '''这个负责安置第n(下标,0-7)行皇后,每次调用,皇后都至少会移动一步'''
 queen[n]+=1
 while queen[n]<8 and not Test(queen,n):queen[n]+=1
 return queen[n]<8
def Solve(queen,n):
 '''这个负责解决第n(下标,0-7)行皇后的安置以及随后所有皇后的安置'''
 if n==8:#安置完所有皇后了,故输出列表
  print queen
  return True#如果设为假,则会尝试所有的安置方案
 else:
  queen[n]=-1#初始化第n行皇后的起始位置(起始位置-1,可安置在0-7)
  while Settle(queen,n):#如果成功安置皇后
   if Solve(queen,n+1):#安置其余皇后
    return True#成功安置,返回真
 return False#失败,返回假
if __name__=='__main__':
 Solve([-1 for i in range(8)],0)#列表的值可以随便设置,因为会初始化
#虽然我们没有进行回溯,但事实上,我们每一个参数相同的Solve函数都尝试了多次
#输出:[0, 4, 7, 5, 2, 6, 1, 3]
#比回溯法容易多了吧

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

Python 相关文章推荐
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
pandas 透视表中文字段排序方法
Nov 16 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
基于python生成器封装的协程类
Mar 20 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python 多进程队列数据处理详解
Dec 23 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
简单了解Java Netty Reactor三种线程模型
Apr 26 Python
解决python运行效率不高的问题
Jul 20 Python
python re的findall和finditer的区别详解
Nov 15 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 #Python
Python输出9*9乘法表的方法
May 25 #Python
Python批量重命名同一文件夹下文件的方法
May 25 #Python
Python实现豆瓣图片下载的方法
May 25 #Python
深入讲解Python中面向对象编程的相关知识
May 25 #Python
详解详解Python中writelines()方法的使用
May 25 #Python
Python中操作文件之write()方法的使用教程
May 25 #Python
You might like
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
PHP提取中文首字母
2008/04/09 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
python中实现控制小数点位数的方法
2019/01/24 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
给导游的表扬信
2014/01/10 职场文书
超市采购员岗位职责
2014/02/01 职场文书
员工考核管理制度
2014/02/02 职场文书
预备党员表决心书
2014/03/11 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
文员岗位职责范本
2015/04/16 职场文书
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers