问题

有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] = iif not conflict(k): # 剪枝match(k+1)

测试

match(0) # 从头(第0个元素)开始

```

效果图

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/6920671.html,如需转载请自行联系原作者

python 回溯法 子集树模板 系列 —— 5、取物搭配问题相关推荐

  1. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

  2. python 回溯法 子集树模板 系列 —— 1、8 皇后问题

    问题 8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 分析 为了简化问题,考虑到8个皇后不同行,则每一行放置一个皇后,每一行的 ...

  3. python 回溯法 子集树模板

    回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足 ...

  4. python回溯算法全排列_python 回溯法 子集树模板 系列 —— 11、全排列

    问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...

  5. 八皇后问题python回溯_解决Python基于回溯法子集树模板实现8皇后问题

    这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下 本文实例 ...

  6. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例

    本文实例讲述了Python基于回溯法子集树模板解决找零问题.分享给大家供大家参考,具体如下: 问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元, ...

  7. python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例

    本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题.分享给大家供大家参考,具体如下: 问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入 ...

  8. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例

    本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...

  9. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例

    本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...

最新文章

  1. python 检测四边形,并矫正
  2. 【译】如何停止使用console.log()转而使用浏览器debugger
  3. java ee500错误_无法访问页面,500错误
  4. Java快速排序的调试
  5. 抽象类和接口设计_如何设计类和接口
  6. LoadRunner的Oracle计数器
  7. Linux在终端启动程序关闭终端不退出的方法
  8. SRNTT:Image Super-Resolution by Neural Texture Transfer
  9. java xml 转excel_如何用java实现xml文件转excel
  10. 下载徐小明新浪博客全部博文链接
  11. python处理时间格式转换,将xxxx年xx月xx日转化为xxxx-xx-xx格式
  12. 编译内核遇到:error: ‘ovl_v1_fs_type’ undeclared (first use in this function)错误
  13. 无法从共享目录中映射段 linux,在Linux中Varnish无法启动:无法从共享对象映射段:不允许操作...
  14. python 多线程实现多任务,多进程实行多任务
  15. 2017四月TOP100电商类App排行榜出炉
  16. 为什么使用 XML?
  17. 每个人小时候都有一个小小的梦
  18. Linux中vgextend的含义,vgextend(8)
  19. 【samba】Ubuntu samba的安装及使用方法
  20. 锁定行列的html插件,如何实现行列的锁定

热门文章

  1. leetcode算法题--环绕字符串中唯一的子字符串★
  2. word关闭未响应_大众途观全景天窗遮阳卷帘无法关闭
  3. [Manifest]关于sharedUserIdsharedUserLabel
  4. JauntVR中文版登陆小米商店,首波内容有《五十度黑》
  5. LNMP(Nginx负载均衡,SSL原理,Nginx配置SSL,生产SSL密钥对)
  6. Linux 计划任务整理
  7. 如何在Ubuntu上使用MultiSystem创建多启动USB盘
  8. 使用StarWind为RAC设置存储
  9. 直击微软MIX11 聚焦IE10、Silverlight5、WP7
  10. (ZT)大学里如何学习 ?