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中执行shell命令的几个方法小结
Sep 18 Python
python实现RSA加密(解密)算法
Feb 17 Python
Python自动化部署工具Fabric的简单上手指南
Apr 19 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
Python实现类的创建与使用方法示例
Jul 25 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
python爬虫添加请求头代码实例
Dec 28 Python
PyTorch中的Variable变量详解
Jan 07 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
Python集合set()使用的方法详解
Mar 18 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
php流量统计功能的实现代码
2012/09/29 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php 常用的系统函数
2017/02/07 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
毕业生自荐信
2013/12/14 职场文书
大学生就业策划书范文
2014/04/04 职场文书
楚门的世界观后感
2015/06/03 职场文书
小学教师教学反思
2016/02/24 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android
muduo TcpServer模块源码分析
2022/04/26 Redis