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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python3.2中Print函数用法实例详解
May 19 Python
Python 文件操作的详解及实例
Sep 18 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python列表切片常用操作实例解析
Mar 10 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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
一段防盗连的PHP代码
2006/12/06 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
js传递数组参数到后台controller的方法
2018/03/29 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
Python生成随机数的方法
2014/01/14 Python
Python基础之函数用法实例详解
2014/09/10 Python
python实现AES加密解密
2019/03/28 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
橄榄树药房:OLIVEDA
2019/09/01 全球购物
应届生财务管理求职信
2013/11/06 职场文书
教师学习培训邀请函
2014/02/04 职场文书
关于旅游的活动方案
2014/08/15 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
思品教学工作总结
2015/08/10 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers