python基于右递归解决八皇后问题的方法

作者:小萝莉 时间:2021-01-12 21:02:38 

本文实例讲述了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,递归,八皇后
0
投稿

猜你喜欢

  • python计算列表元素与乘积详情

    2023-05-12 00:50:19
  • PHP中isset()和unset()函数的用法小结

    2023-11-19 14:19:24
  • php中关于socket的系列函数总结

    2023-11-17 13:57:35
  • Python中关于文件的具体操作与介绍

    2022-03-25 20:27:24
  • python字符串和常用数据结构知识总结

    2023-09-29 21:00:55
  • Django用户认证系统如何实现自定义

    2021-02-03 07:54:38
  • Python多线程实例教程

    2022-11-30 14:15:43
  • 这可能是最好玩的python GUI入门实例(推荐)

    2021-02-01 15:33:42
  • JS数组方法汇总

    2009-08-03 14:06:00
  • python函数的重新定义及练习

    2023-10-12 22:47:55
  • django 读取图片到页面实例

    2023-02-22 13:30:50
  • ASP环境下邮件列表功能的实现

    2007-10-03 14:25:00
  • python简单实现AES加密和解密

    2021-08-12 06:05:48
  • asp 数据库连接函数代码

    2011-04-04 11:08:00
  • Python中实现常量(Const)功能

    2021-01-27 17:16:54
  • Python无头爬虫下载文件的实现

    2023-11-30 03:24:00
  • 实操Python爬取觅知网素材图片示例

    2021-12-12 21:19:59
  • PHP 截取字符串 分别适合GB2312和UTF8编码情况

    2023-09-30 18:02:30
  • Python基础之条件控制操作示例【if语句】

    2021-02-09 09:30:02
  • 数据库疑难讲解:改善SQL Server内存管理

    2009-10-29 13:30:00
  • asp之家 网络编程 m.aspxhome.com