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中os.path用法分析
Jan 15 Python
Python对列表排序的方法实例分析
May 16 Python
Python自动发邮件脚本
Mar 31 Python
基于hashlib模块--加密(详解)
Jun 21 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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
Yii中表单用法实例详解
2016/01/05 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
javascript基础知识讲解
2017/01/11 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Python地图绘制实操详解
2019/03/04 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
基于Django实现日志记录报错信息
2019/12/17 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
python中altair可视化库实例用法
2021/01/26 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
大学毕业生通用自我评价
2014/01/05 职场文书
青年标兵事迹材料
2014/08/16 职场文书
明确岗位职责
2015/02/14 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
关于环保的广播稿
2015/12/17 职场文书
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL