国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python基于回溯法子集樹模板解決選排問題示例

2019-11-25 15:52:31
字體:
來源:轉載
供稿:網友

本文實例講述了Python基于回溯法子集樹模板解決選排問題。分享給大家供大家參考,具體如下:

問題

從n個元素中挑選m個元素進行排列,每個元素最多可重復r次。其中m∈[2,n],r∈[1,m]。

如:從4個元素中挑選3個元素進行排列,每個元素最多可重復r次。

分析

解x的長度是固定的,為m。

對于解x,先排第0個位置的元素x[0],再排第1個位置的元素x[1]。我們把后者看作是前者的一種狀態,即x[1]是x[0]的一種狀態??!

一般地,把x[k]看作x[k-1]的狀態空間a中的一種狀態,我們要做的就是遍歷a[k-1]的所有狀態。

那么,套用子集樹模板即可。

代碼

'''選排問題從n個元素中挑選m個元素進行排列,每個元素最多可重復r次。其中m∈[2,n],r∈[1,m]。作者:hhh5460時間:2017年6月2日 09時05分聲明:此算法版權歸hhh5460所有'''n = 4a = ['a','b','c','d']m = 3  # 從4個中挑3個r = 2  # 每個元素最多可重復2x = [0]*m  # 一個解(m元0-1數組)X = []   # 一組解# 沖突檢測def conflict(k):  global n, r, x, X, a  # 部分解內的元素x[k]不能超過r  if x[:k+1].count(x[k]) > r:    return True  return False # 無沖突# 用子集樹模板實現選排問題def perm(k): # 到達第k個元素  global n,m, a, x, X  if k == m: # 超出最尾的元素    print(x)    #X.append(x[:]) # 保存(一個解)  else:    for i in a: # 遍歷x[k-1]的狀態空間a,其它的事情交給剪枝函數!      x[k] = i      if not conflict(k): # 剪枝        perm(k+1)# 測試perm(0) # 從x[0]開始排列

效果圖

 

更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 本溪| 仙桃市| 河南省| 江永县| 南宫市| 孙吴县| 东辽县| 本溪| 广汉市| 滦平县| 开阳县| 沁源县| 新竹县| 务川| 隆尧县| 类乌齐县| 遵义县| 万安县| 微山县| 金平| 乃东县| 福州市| 铜川市| 阜城县| 汉沽区| 阿城市| 全椒县| 玉山县| 贵定县| 沈丘县| 合川市| 高雄市| 吴旗县| 新巴尔虎右旗| 麦盖提县| 壤塘县| 高雄县| 惠东县| 仁怀市| 阿拉善右旗| 明水县|