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 相关文章推荐
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python下载指定页面上图片的方法
May 12 Python
Python实现的弹球小游戏示例
Aug 01 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
Python中遍历列表的方法总结
Jun 27 Python
Python实现AI自动抠图实例解析
Mar 05 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
解决numpy和torch数据类型转化的问题
May 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与SQL注入攻击[三]
2007/04/17 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python发布模块的步骤分享
2014/02/21 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
解决Python中回文数和质数的问题
2019/11/24 Python
python合并多个excel文件的示例
2020/09/23 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
医药营销专业个人自荐信
2013/09/29 职场文书
九年级体育教学反思
2014/01/23 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
设备售后服务承诺书
2014/05/30 职场文书
教师求职自荐信范文
2015/03/04 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书