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的Django框架的dj-scaffold项目
May 30 Python
python控制台中实现进度条功能
Nov 10 Python
Python 正则表达式的高级用法
Dec 04 Python
python实现12306火车票查询器
Apr 20 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
python多线程semaphore实现线程数控制的示例
Aug 10 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
一文搞懂python异常处理、模块与包
Jun 26 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python实现注册、登录小程序功能
2018/09/21 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
Python常用库大全及简要说明
2020/01/17 Python
Python日志syslog使用原理详解
2020/02/18 Python
django列表筛选功能的实现代码
2020/03/27 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
pip install命令安装扩展库整理
2021/03/02 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
初中音乐教学反思
2014/01/12 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
演讲稿开场白台词
2014/08/25 职场文书
高中学生自我评价范文
2014/09/23 职场文书
2014年纪检工作总结
2014/11/12 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python