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脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
Python3访问并下载网页内容的方法
Jul 28 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
浅谈python中真正关闭socket的方法
Dec 18 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
python 实现二维列表转置
Dec 02 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
python else语句在循环中的运用详解
Jul 06 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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
zf框架的registry(注册表)使用示例
2014/03/13 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
js类型检查实现代码
2010/10/29 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
详解vue组件基础
2018/05/04 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
网络安全类面试题
2015/08/01 面试题
工地门卫岗位职责
2013/12/30 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
个人主要事迹材料
2014/08/26 职场文书
暑期学习心得体会
2014/09/02 职场文书
迎国庆横幅标语
2014/10/08 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
如何用python反转图片,视频
2021/04/24 Python