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开发之函数定义实例分析
Nov 12 Python
python使用paramiko实现远程拷贝文件的方法
Apr 18 Python
Python pass详细介绍及实例代码
Nov 24 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
python学习开发mock接口
Apr 28 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
Python验证码截取识别代码实例
May 16 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 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学习 函数 课件
2008/06/15 PHP
PHP 反向排序和随机排序代码
2010/06/30 PHP
浅析php工厂模式
2014/11/25 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python实现通过shelve修改对象实例
2014/09/26 Python
Python中的日期时间处理详解
2016/11/17 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
工程项目建议书范文
2014/03/12 职场文书
项目建议书格式
2014/03/12 职场文书
食品安全标语
2014/06/07 职场文书
增员口号大全
2014/06/18 职场文书
学校党员对照检查材料
2014/08/28 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书