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安装以及IDE的配置教程
Apr 29 Python
机器学习python实战之手写数字识别
Nov 01 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
使用python存储网页上的图片实例
May 22 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
Python 实现微信自动回复的方法
Sep 11 Python
Python调用JavaScript代码的方法
Oct 27 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
flask项目集成swagger的方法
Dec 09 Python
opencv 分类白天与夜景视频的方法
Jun 05 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
php INI配置文件的解析实现分析
2011/01/04 PHP
php Smarty 字符比较代码
2011/02/27 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
Vue 样式绑定的实现方法
2019/01/15 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
节约用电标语
2014/06/17 职场文书
见义勇为事迹材料
2014/12/24 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
创业计划书之花店
2019/09/20 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js