本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题。分享给大家供大家参考,具体如下:

问题

将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方格,要求每个方格进入且只进入一次,找出一种可行的方案。

分析

说明:这个图是5*5的棋盘。

类似于迷宫问题,只不过此问题的解长度固定为64

每到一格,就有[(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)]顺时针8个方向可以选择。

走到一格称为走了一步,把每一步看作元素,8个方向看作这一步的状态空间。

套用回溯法子集树模板。

代码

'''马踏棋盘'''

n = 5 # 8太慢了,改为5

p = [(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)] # 状态空间,8个方向

entry = (2,2) # 出发地

x = [None]*(n*n) # 一个解,长度固定64,形如[(2,2),(4,3),...]

X = [] # 一组解

# 冲突检测

def conflict(k):

global n,p, x, X

# 步子 x[k] 超出边界

if x[k][0] < 0 or x[k][0] >= n or x[k][1] < 0 or x[k][1] >= n:

return True

# 步子 x[k] 已经走过

if x[k] in x[:k]:

return True

return False # 无冲突

# 回溯法(递归版本)

def subsets(k): # 到达第k个元素

global n, p, x, X

if k == n*n: # 超出最尾的元素

print(x)

#X.append(x[:]) # 保存(一个解)

else:

for i in p: # 遍历元素 x[k-1] 的状态空间: 8个方向

x[k] = (x[k-1][0] + i[0], x[k-1][1] + i[1])

if not conflict(k): # 剪枝

subsets(k+1)

# 测试

x[0] = entry # 入口

subsets(1) # 开始走第k=1步

效果图

希望本文所述对大家Python程序设计有所帮助。

python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例相关推荐

  1. python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例

    本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题.分享给大家供大家参考,具体如下: 问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入 ...

  2. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例

    本文实例讲述了Python基于回溯法子集树模板解决找零问题.分享给大家供大家参考,具体如下: 问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元, ...

  3. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例

    本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...

  4. 八皇后问题python回溯_解决Python基于回溯法子集树模板实现8皇后问题

    这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下 本文实例 ...

  5. python回溯方法的模板_实例讲解Python基于回溯法子集树模板实现图的遍历功能

    这篇文章主要介绍了Python基于回溯法子集树模板实现图的遍历功能,结合实例形式分析了Python使用回溯法子集树模板针对图形遍历问题的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Py ...

  6. 残缺棋盘问题算法分析_javascript使用递归回溯算法和贪心算法解决马踏棋盘问题...

    马踏棋盘算法介绍和游戏演示 1.马踏棋盘算法也被称为骑士周游问题 2.将马随机放在国际象棋的8×8棋盘Board[0-7][0-7]的某个方格中,马按走棋规则(马走日字)进行移动.要求每个方格只进入一 ...

  7. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

  8. python 回溯法 子集树模板 系列 —— 1、8 皇后问题

    问题 8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 分析 为了简化问题,考虑到8个皇后不同行,则每一行放置一个皇后,每一行的 ...

  9. python 回溯法 子集树模板

    回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足 ...

最新文章

  1. 通过修改软链接升高 gcc 版本、降低 gcc 版本
  2. [你必须知道的.NET]第二十一回:认识全面的null
  3. 谈谈ogre中级教程中例子与appwizard冲突
  4. 报名开启!AI+科学计算专场直播:大咖齐聚×独家礼物,限量200份
  5. QDoc文字标记textmarkup
  6. 【python 11】super()
  7. 阿里二面:RocketMQ同一个消费组内的消费者订阅量不同tag,会有问题吗?
  8. html5中矩形条怎么写,html5中往矩形中贴图片
  9. cookie和session理解
  10. 二级域名共享cookies
  11. 微信小程序广告接入,小程序加广告
  12. 网页中添加QQ链接,别人一点就能和我进行QQ聊天
  13. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(模拟+二进制枚举子串)
  14. 文献综述是什么,该怎么写?
  15. S01E08-小雅:我在读研期间参与 CHAOSS 开源社区的心路经历
  16. 实时获取SDN网络拓扑中交换机流表项的思路
  17. 如何用计算机求极限,计算器的极限_500字
  18. cetus权限连接主从mysql_网易开源中间件 -Cetus监控模块
  19. Linux设置组密码
  20. spring boot整合security时候处理静态资源拦截问题

热门文章

  1. 根据在同一时间使用计算机,3.根据在同一时间使用计算机用户的多少,操作系统可以分为单用户操作系统和多用户操作系统。...
  2. 江西师范大学2017年C语言考试,2018年江西师范大学程序设计(C语言)考研初试大纲...
  3. 下载丨2020数据技术嘉年华PPT(DTC 2020)更新中...
  4. 今晚直播丨 RabbitMQ原理与常见问题处理
  5. 快讯:2019 OOW 文档已提供下载
  6. 解析对偶理论与对偶单纯性法
  7. 掌握鸿蒙轻内核静态内存的使用,从源码分析开始
  8. LiteOS内核源码分析:动态内存之Bestfit分配算法
  9. 一起来学习LiteOS中断模块的源代码
  10. 你想知道的动态URL、静态URl、伪静态URL概念及区别都在这里!