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实现按行切分文本文件的方法
Apr 18 Python
python 实现登录网页的操作方法
May 11 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python多线程和多进程关系详解
Dec 14 Python
基于python制作简易版学生信息管理系统
Apr 20 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中的加密功能
2006/10/09 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python检测服务器是否正常
2014/02/16 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
Python实现批量修改文件名实例
2015/07/08 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python 将Excel转Word的示例
2021/03/02 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
护士自我鉴定怎么写
2014/02/07 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
小学教学随笔感言
2014/02/26 职场文书
行政专员的岗位职责
2014/03/10 职场文书
优秀党员事迹材料
2014/12/18 职场文书
捐书仪式主持词
2015/07/04 职场文书
会议简讯范文
2015/07/20 职场文书
基于Redission的分布式锁实战
2022/08/14 Redis