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系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
python有证书的加密解密实现方法
Nov 19 Python
python实现的简单抽奖系统实例
May 22 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
python中altair可视化库实例用法
Jan 26 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读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
js单词形式的运算符
2014/05/06 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
js实现随机点名小功能
2017/08/17 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
npm的lock机制解析
2019/06/20 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python实现多线程抓取妹子图
2015/08/08 Python
Python中Threading用法详解
2017/12/27 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
python中metaclass原理与用法详解
2019/06/25 Python
Django分组聚合查询实例分享
2020/04/29 Python
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
关于运动会的稿件
2014/02/02 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
工人先进事迹材料
2014/12/26 职场文书
最美乡村教师观后感
2015/06/11 职场文书
新闻报道稿范文
2015/07/23 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB