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数据类型转换函数总结
Mar 11 Python
Python写的Socks5协议代理服务器
Aug 06 Python
python遍历数组的方法小结
Apr 30 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 Python
python 实现UTC时间加减的方法
Dec 31 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
深入浅析python 协程与go协程的区别
May 09 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
python 创建一维的0向量实例
Dec 02 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
学点简单的Django之第一个Django程序的实现
Feb 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
jQuery 常见学习网站与参考书
2009/11/09 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
Django卸载之后重新安装的方法
2017/03/15 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
小学班级口号
2014/06/09 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
财务管理专业自荐书
2014/09/02 职场文书
学习考察心得体会
2014/09/04 职场文书
租房协议书
2014/09/12 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL