Python基于回溯法子集树模板解决选排问题示例


Posted in Python onSeptember 07, 2017

本文实例讲述了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 = 4
a = ['a','b','c','d']
m = 3  # 从4个中挑3个
r = 2  # 每个元素最多可重复2
x = [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数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解Python的Django框架中的模版相关知识
Jul 15 Python
win与linux系统中python requests 安装
Dec 04 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
Python贪心算法实例小结
Apr 22 Python
python实现对输入的密文加密
Mar 20 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
django框架模板语言使用方法详解
Jul 18 Python
Django urls.py重构及参数传递详解
Jul 23 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
打包PyQt5应用时的注意事项
Feb 14 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 #Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 #Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 #Python
python中利用Future对象异步返回结果示例代码
Sep 07 #Python
python中利用Future对象回调别的函数示例代码
Sep 07 #Python
Python标准库之itertools库的使用方法
Sep 07 #Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 #Python
You might like
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
2019/08/16 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
通过Python实现自动填写调查问卷
2017/09/06 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python实现五子棋程序
2020/04/24 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
快递业务员岗位职责
2014/01/06 职场文书
财务会计人员求职的自我评价
2014/01/13 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
二年级数学教学反思
2014/01/21 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2014年除四害工作总结
2014/12/06 职场文书
预备党员自我评价范文
2015/03/04 职场文书
react 路由Link配置详解
2021/11/11 Javascript