博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 回溯法 子集树模板 系列 —— 5、取物搭配问题
阅读量:6761 次
发布时间:2019-06-26

本文共 787 字,大约阅读时间需要 2 分钟。

问题

有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个元素)开始

```

效果图

img_a63fa1cee7930e431ef5da6e9c17589b.jpg

转载地址:http://xideo.baihongyu.com/

你可能感兴趣的文章
前端工程优化:javascript的优化小结
查看>>
Android 动画实战-仿微博雷达功能
查看>>
leetCode 13 Roman to Integer
查看>>
SpringBoot高级篇Redis之Hash数据结构使用姿势
查看>>
javaScript设计模式:Observer(观察者)模式实践(一)
查看>>
介绍两个好玩的和Github相关的Chrome扩展
查看>>
PC浏览器播放HLS协议的视频
查看>>
函数计算性能福利篇(二) —— 业务冷启动优化
查看>>
Python学习之路25-使用一等函数实现设计模式
查看>>
macOS 10 13 Cocoapods 命令错误
查看>>
Swift3中的 Method Swizzling
查看>>
BroadcastReceive简介
查看>>
知乎 node事件机制 转载
查看>>
学习JavaScript数据结构与算法 (一)
查看>>
vue预渲染prerender-spa-plugin解决首屏白屏问题
查看>>
生产系统 SQL 执行异常原因分析
查看>>
【CSS基础】--居中的方式总结
查看>>
关于app的登录退出内容
查看>>
基于 Laravel 的模块化开发框架 Notadd RC1 fix1 发布
查看>>
模拟new实现
查看>>