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 pdb调试方法分享
Jan 21 Python
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
Python异常的检测和处理方法
Oct 26 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 Python
Python中itertools库的四个函数介绍
Apr 06 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中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
Firefox div高度自适应
2009/04/28 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python使用mailbox打印电子邮件的方法
2015/04/30 Python
利用python实现数据分析
2017/01/11 Python
Python排序算法实例代码
2017/08/10 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
甜点店创业计划书
2014/01/27 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
教师自我剖析材料
2014/09/29 职场文书
2015年党员承诺书
2015/01/21 职场文书
征求意见函
2015/06/05 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书