Python基于回溯法子集树模板解决取物搭配问题实例


Posted in Python onSeptember 02, 2017

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

问题

有5件不同的上衣,3条不同的裤子,4顶不同的帽子,从中取出一顶帽子、一件上衣和一条裤子作为一种搭配,问有多少种不同的搭配?

分析

换个角度看,现有头、身、腿三个元素,每个元素都有各自的几种状态。
头元素有['帽1', '帽2', '帽3', '帽4']共4种状态,身元素有['衣1', '衣2', '衣3', '衣4', '衣5']共5种状态,腿元素有['裤1', '裤2', '裤3']共3种状态
从头开始,自上而下,遍历每个元素的所有状态。

解的长度是固定的。

这里特别注意:每个元素的状态数目不同!!!

套用子集树模板即可

代码

```python
'''取物排列问题'''
n = 3 # 3个元素

头、身、腿3个元素各自的状态空间

a = [['帽1', '帽2', '帽3', '帽4'],
['衣1', '衣2', '衣3', '衣4', '衣5'],
['裤1', '裤2', '裤3']]
x = [0]*n # 一个解,长度固定,3元数组
X = [] # 一组解

冲突检测

def conflict(k):
return False # 无冲突

套用子集树模板

def match(k): # 到达第k个元素
global n, a, x, X
if k >= n: # 超出最尾的元素
  print(x)
  #X.append(x[:]) # 保存(一个解)
else:
  for i in a[k]: # 直接a[k],若间接则range(len(a[k]))。 遍历第k个元素的对应的所有选择状态,不同的元素状态数目不同
    x[k] = i
    if not conflict(k): # 剪枝
      match(k+1)

测试

match(0) # 从头(第0个元素)开始

效果图

Python基于回溯法子集树模板解决取物搭配问题实例

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

Python 相关文章推荐
跟老齐学Python之开始真正编程
Sep 12 Python
Python中3种内建数据结构:列表、元组和字典
Nov 30 Python
Django学习笔记之ORM基础教程
Mar 27 Python
python多线程之事件Event的使用详解
Apr 27 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
详解基于django实现的webssh简单例子
Jul 17 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
详解python logging日志传输
Jul 01 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python切割图片的示例
Nov 12 Python
pytorch 如何使用amp进行混合精度训练
May 24 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 #Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 #Python
基于python 字符编码的理解
Sep 02 #Python
Python实现的简单模板引擎功能示例
Sep 02 #Python
Python实现Logger打印功能的方法详解
Sep 01 #Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 #Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 #Python
You might like
PHP的分页功能
2007/03/21 PHP
php生成excel文件的简单方法
2014/02/08 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
网上抓的一个特效
2007/05/11 Javascript
js window.event对象详尽解析
2009/02/17 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
Python with的用法
2014/08/22 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python中如何引入第三方模块
2020/05/27 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
国际贸易专业个人求职信格式
2014/02/02 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
化妆品活动策划方案
2014/05/23 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
普通党员个人整改措施
2014/10/27 职场文书
继承权公证书范本
2015/01/23 职场文书
公司庆典欢迎词
2015/01/26 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS