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 相关文章推荐
Python3实现Web网页图片下载
Jan 28 Python
python数据预处理之将类别数据转换为数值的方法
Jul 05 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
python中装饰器级连的使用方法示例
Sep 29 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
python主要用于哪些方向
Jul 05 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
Jquery性能优化详解
2014/05/15 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
Python实现批量转换文件编码的方法
2015/07/28 Python
python生成验证码图片代码分享
2016/01/28 Python
深入理解Python中的内置常量
2017/05/20 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python django生成迁移文件的实例
2019/08/31 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
密封类可以有虚函数吗
2014/08/11 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
全陪导游欢迎词
2014/01/17 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
蓝颜请假条
2014/04/11 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
爱情保证书
2015/01/17 职场文书
美术教师个人总结
2015/02/06 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
吃通javascript正则表达式
2021/04/21 Javascript
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript