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删除特定文件的方法
Jul 30 Python
深入理解Python变量与常量
Jun 02 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python实现查找所有程序的安装信息
Feb 18 Python
pyspark 随机森林的实现
Apr 24 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP微信红包API接口
2015/12/05 PHP
php实现的操作excel类详解
2016/01/15 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
vue实现表格数据的增删改查
2017/07/10 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
Python断言assert的用法代码解析
2018/02/03 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python基于递归解决背包问题详解
2019/07/03 Python
python用for循环求和的方法总结
2019/07/08 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
详解Django配置优化方法
2019/11/18 Python
一文读懂Python 枚举
2020/08/25 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
本科生详细的自我评价
2013/09/19 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书