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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
Python 中字符串拼接的多种方法
Jul 30 Python
pytorch索引查找 index_select的例子
Aug 18 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
python实现交并比IOU教程
Apr 16 Python
Python之字典添加元素的几种方法
Sep 30 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
浅谈Python数学建模之整数规划
Jun 23 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 压缩文件夹的类代码
2009/11/05 PHP
php构造函数实例讲解
2013/11/13 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
python验证码识别实例代码
2018/02/03 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
Python魔法方法详解
2019/02/13 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
银行内勤岗位职责
2014/04/09 职场文书
商业融资计划书
2014/04/29 职场文书
银行求职信怎么写
2014/05/26 职场文书
小学校本培训方案
2014/06/06 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
保险内勤岗位职责
2015/04/13 职场文书
确保工程质量承诺书
2015/04/29 职场文书
财务人员入职担保书
2015/09/22 职场文书
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL