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进程类subprocess的一些操作方法例子
Nov 22 Python
python传递参数方式小结
Apr 17 Python
粗略分析Python中的内存泄漏
Apr 23 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
python实现黑客字幕雨效果
Jun 21 Python
Python数据存储之 h5py详解
Dec 26 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 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
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
相对路径转化成绝对路径
2007/04/10 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
js登录弹出层特效
2014/03/07 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
javascript中数组和字符串的方法对比
2016/07/20 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
python实现最长公共子序列
2018/05/22 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Python之多进程与多线程的使用
2021/02/23 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
党员教师自我剖析材料
2014/09/29 职场文书
同意报考证明
2015/06/17 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
python如何做代码性能分析
2021/04/26 Python
服务器间如何实现文件共享
2022/05/20 Servers