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的词法分析与语法分析
May 18 Python
讲解python参数和作用域的使用
Nov 01 Python
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
Python编程中用close()方法关闭文件的教程
May 24 Python
Python正则表达式完全指南
May 25 Python
Python 多线程Threading初学教程
Aug 22 Python
django 解决manage.py migrate无效的问题
May 27 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
pycharm显示远程图片的实现
Nov 04 Python
Python实现打印实心和空心菱形
Nov 23 Python
基于python 凸包问题的解决
Apr 16 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 过滤危险html代码
2009/06/29 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JavaScript Split()方法
2015/12/18 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
Python交换变量
2008/09/06 Python
Python创建xml的方法
2015/03/10 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python面向对象之继承代码详解
2018/01/29 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
预防煤气中毒方案
2014/06/16 职场文书
教师一帮一活动总结
2014/07/08 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
Oracle使用别名的好处
2022/04/19 Oracle