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函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
Python实现简单的用户交互方法详解
Sep 25 Python
谈一谈基于python的面向对象编程基础
May 21 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
python opencv实现信用卡的数字识别
Jan 12 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
Django实现前台上传并显示图片功能
May 29 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
python3 删除所有自定义变量的操作
Apr 08 Python
如何使用Python实现一个简易的ORM模型
May 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模板引擎SMARTY
2006/10/09 PHP
用libtemplate实现静态网页生成
2006/10/09 PHP
介绍几个array库的新函数 php
2006/12/29 PHP
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
JS日历 推荐
2006/12/03 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
Pandas透视表(pivot_table)详解
2019/07/22 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
Python正则表达式如何匹配中文
2020/05/27 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
python中re模块知识点总结
2021/01/17 Python
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
班级体育活动总结
2014/07/05 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
初二数学教学反思
2016/02/17 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS