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 测试实现方法
Dec 24 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python常见内置高效率函数用法示例
Jul 31 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
python绘制地震散点图
Jun 18 Python
python可视化爬虫界面之天气查询
Jul 03 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
Python双链表原理与实现方法详解
Feb 22 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 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读取javascript设置的cookies的代码
2010/04/12 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
脚本合并提升javascript性能示例
2014/02/24 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
详解Python发送邮件实例
2016/01/10 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
信息技术专业个人自我评价
2013/12/11 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
小学语文教学反思
2014/02/10 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
委托公证书样本
2015/01/23 职场文书
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
Spring中bean集合注入的方法详解
2022/07/07 Java/Android