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

首頁 > 編程 > Python > 正文

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

2020-01-04 16:41:40
字體:
來源:轉載
供稿:網友

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

問題

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

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

分析

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

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

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

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

代碼

'''選排問題從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]的狀態(tài)空間a,其它的事情交給剪枝函數!      x[k] = i      if not conflict(k): # 剪枝        perm(k+1)# 測試perm(0) # 從x[0]開始排列

效果圖

 Python,回溯法,子集樹模板,選排問題

 

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 青河县| 阿图什市| 大竹县| 郧西县| 班玛县| 平度市| 上蔡县| 斗六市| 德格县| 河津市| 枣庄市| 武川县| 绥棱县| 新巴尔虎右旗| 利津县| 启东市| 丰城市| 桐庐县| 塔城市| 通道| 丹寨县| 沙洋县| 平泉县| 义马市| 渭源县| 高密市| 元谋县| 嘉善县| 凤山市| 湟中县| 赤峰市| 阿荣旗| 山西省| 鄂伦春自治旗| 湖南省| 旺苍县| 繁峙县| 淳化县| 天长市| 廉江市| 合江县|