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 相关文章推荐
pyside写ui界面入门示例
Jan 22 Python
python实现dict版图遍历示例
Feb 19 Python
Python写的一个简单监控系统
Jun 19 Python
Django入门使用示例
Dec 12 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
django框架F&amp;Q 聚合与分组操作示例
Dec 12 Python
python内打印变量之%和f的实例
Feb 19 Python
为什么说python适合写爬虫
Jun 11 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 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中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
Laravel 5 学习笔记
2015/03/06 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
python保存数据到本地文件的方法
2018/06/23 Python
set在python里的含义和用法
2019/06/24 Python
浅析python redis的连接及相关操作
2019/11/07 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python实现猜拳游戏
2020/03/04 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
用python写爬虫简单吗
2020/07/28 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
房地产销售计划书
2014/01/10 职场文书
家长写给孩子的评语
2014/04/18 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
单位作风建设自查报告
2014/10/23 职场文书
家长对孩子的寄语
2015/02/26 职场文书
爱国主义影片观后感
2015/06/18 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题