Python基于回溯法子集树模板解决马踏棋盘问题示例


Posted in Python onSeptember 11, 2017

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

问题

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

分析

Python基于回溯法子集树模板解决马踏棋盘问题示例

说明:这个图是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数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

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

Python 相关文章推荐
Python中的作用域规则详解
Jan 30 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
django 单表操作实例详解
Jul 30 Python
python 调试冷知识(小结)
Nov 11 Python
Python语言异常处理测试过程解析
Jan 08 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
Python logging模块进行封装实现原理解析
Aug 07 Python
浅谈Python类的单继承相关知识
May 12 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 #Python
详解 Python 与文件对象共事的实例
Sep 11 #Python
Python 私有函数的实例详解
Sep 11 #Python
Python模拟用户登录验证
Sep 11 #Python
Python模拟三级菜单效果
Sep 11 #Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 #Python
Python 模拟购物车的实例讲解
Sep 11 #Python
You might like
PHP4(windows版本)中的COM函数
2006/10/09 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
js 匿名调用实现代码
2009/06/19 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
用Python输出一个杨辉三角的例子
2014/06/13 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python打印输出数组中全部元素
2018/03/13 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
一些PHP的面试题
2015/05/06 面试题
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
销售顾问的岗位职责
2013/11/13 职场文书
英语国培研修感言
2014/02/13 职场文书
部队万能检讨书
2014/02/20 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
三好生演讲稿
2014/09/12 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫