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


Posted in Python onSeptember 07, 2017

本文实例讲述了Python基于回溯法子集树模板解决全排列问题。分享给大家供大家参考,具体如下:

问题

实现 'a', 'b', 'c', 'd' 四个元素的全排列。

分析

这个问题可以直接套用排列树模板。

不过本文使用子集树模板。分析如下:

一个解x就是n个元素的一种排列,显然,解x的长度是固定的,n。
我们这样考虑:对于解x,先排第0个元素x[0],再排第1个元素x[1],...,当来到第k-1个元素x[k-1]时,就将剩下的未排的所有元素看作元素x[k-1]的状态空间,遍历之。

至此,套用子集树模板即可。

代码

'''用子集树实现全排列'''
n = 4
a = ['a','b','c','d']
x = [0]*n  # 一个解(n元0-1数组)
X = []   # 一组解
# 冲突检测:无
def conflict(k):
  global n, x, X, a
  return False # 无冲突
# 用子集树模板实现全排列
def perm(k): # 到达第k个元素
  global n, a, x, X
  if k >= n: # 超出最尾的元素
    print(x)
    #X.append(x[:]) # 保存(一个解)
  else:
    for i in set(a)-set(x[:k]): # 遍历,剩下的未排的所有元素看作元素x[k-1]的状态空间
      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中使用元类的教程
Apr 28 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
安装Python的教程-Windows
Jul 22 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
详解python 注释、变量、类型
Aug 10 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
python批量解压zip文件的方法
Aug 20 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 Python
Python实现归一化算法详情
Mar 18 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
教你学会使用Python正则表达式
Sep 07 #Python
You might like
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
简单实现php上传文件功能
2017/09/21 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
大学生个人自我鉴定
2013/12/03 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
行政内勤岗位职责
2014/04/07 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
银行先进个人总结
2015/02/15 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
vue项目支付功能代码详解
2022/02/18 Vue.js