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 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
python 多个参数不为空校验方法
Feb 14 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
Python元组常见操作示例
Feb 19 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
浅析Python迭代器的高级用法
Jul 16 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 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定时自动生成静态HTML的实现代码
2010/06/20 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
高职教师岗位职责
2013/12/24 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android
MySQL优化及索引解析
2022/03/17 MySQL