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中利用Pandas库处理大数据的简单介绍
Apr 07 Python
使用Python生成随机密码的示例分享
Feb 18 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
对Python中range()函数和list的比较
Apr 19 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
谈一谈基于python的面向对象编程基础
May 21 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
详解Python 中的容器 collections
Aug 17 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和ACCESS写聊天室(九)
2006/10/09 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
Champion官网:美国冠军运动服装
2017/01/25 全球购物
《鱼游到了纸上》教学反思
2014/02/20 职场文书
授权委托书范文
2014/07/31 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
普通党员整改措施
2014/10/24 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
python四种出行路线规划的实现
2021/06/23 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL