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

首頁 > 編程 > Python > 正文

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

2020-02-16 10:10:32
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色达县| 英吉沙县| 孟津县| 恩平市| 石阡县| 陕西省| 佳木斯市| 南开区| 平定县| 绥滨县| 闽清县| 武强县| 吐鲁番市| 长顺县| 保定市| 曲靖市| 陵水| 沅陵县| 宝丰县| 灵川县| 合作市| 扬中市| 云安县| 哈密市| 岢岚县| 法库县| 巢湖市| 江西省| 安化县| 潮州市| 英山县| 河源市| 体育| 峨眉山市| 台山市| 旬阳县| 乌兰浩特市| 封丘县| 米易县| 洱源县| 永嘉县|