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 31 Python
Python zip()函数用法实例分析
Mar 17 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
python re模块的高级用法详解
Jun 06 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
python贪吃蛇游戏代码
Apr 18 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
如何使用Python抓取网页tag操作
Feb 14 Python
解决c++调用python中文乱码问题
Jul 29 Python
pycharm Tab键设置成4个空格的操作
Feb 26 Python
分享几种python 变量合并方法
Mar 20 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中的路径问题与set_include_path使用介绍
2014/02/11 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python装饰器简单用法实例小结
2018/12/03 Python
Python 使用type来定义类的实现
2019/11/19 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
巴西网上药房:onofre
2016/11/21 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
50岁生日感言
2014/01/23 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技