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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
浅谈Python程序与C++程序的联合使用
Apr 07 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
解决python报错MemoryError的问题
Jun 26 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
python多任务之协程的使用详解
Aug 26 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
Python表达式的优先级详解
Feb 18 Python
python中使用input()函数获取用户输入值方式
May 03 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
PyTorch dropout设置训练和测试模式的实现
May 27 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中去掉字符串首尾空格的方法
2012/05/19 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
PHP中的session安全吗?
2016/01/22 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
js数组的基本使用总结
2021/01/18 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python抓取网页图片并放到指定文件夹
2014/04/24 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
社团文化节邀请函
2014/01/10 职场文书
高中自我评价范文
2014/01/27 职场文书
会计专业自我评价
2014/02/12 职场文书
一年级班主任感言
2014/03/08 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
医学生求职信
2014/07/01 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
springboot用户数据修改的详细实现
2022/04/06 Java/Android