日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時間:2025/7/14 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 回溯法 子集树模板 系列 —— 5、取物搭配问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題

有5件不同的上衣,3條不同的褲子,4頂不同的帽子,從中取出一頂帽子、一件上衣和一條褲子作為一種搭配,問有多少種不同的搭配?

分析

換個角度看,現(xiàn)有頭、身、腿三個元素,每個元素都有各自的幾種狀態(tài)。

頭元素有['帽1', '帽2', '帽3', '帽4']共4種狀態(tài),身元素有['衣1', '衣2', '衣3', '衣4', '衣5']共5種狀態(tài),腿元素有['褲1', '褲2', '褲3']共3種狀態(tài)

從頭開始,自上而下,遍歷每個元素的所有狀態(tài)。

解的長度是固定的

這里特別注意:每個元素的狀態(tài)數(shù)目不同!!!

套用子集樹模板即可

代碼

```python

'''取物排列問題'''

n = 3 # 3個元素

頭、身、腿3個元素各自的狀態(tài)空間

a = [['帽1', '帽2', '帽3', '帽4'],
['衣1', '衣2', '衣3', '衣4', '衣5'],
['褲1', '褲2', '褲3']]

x = [0]*n # 一個解,長度固定,3元數(shù)組
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個元素的對應(yīng)的所有選擇狀態(tài),不同的元素狀態(tài)數(shù)目不同x[k] = iif not conflict(k): # 剪枝match(k+1)

測試

match(0) # 從頭(第0個元素)開始

```

效果圖

本文轉(zhuǎn)自羅兵博客園博客,原文鏈接:http://www.cnblogs.com/hhh5460/p/6920671.html,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的python 回溯法 子集树模板 系列 —— 5、取物搭配问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。