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  __getattr__与__setattr__使用方法
Sep 06 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
Python实现在线音乐播放器
Mar 03 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
3分钟学会一个Python小技巧
Nov 23 Python
Python读取指定日期邮件的实例
Feb 01 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python OpenCV形态学运算示例详解
Apr 07 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的Yii框架的基本使用示例
2015/08/21 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python 学习教程之networkx
2019/04/15 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
python SOCKET编程基础入门
2021/02/27 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
工商学院毕业生自荐信
2013/11/12 职场文书
团日活动总结
2014/04/28 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
《学会看病》教学反思
2016/02/17 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python