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 ElementTree 基本读操作示例
Apr 09 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
python实现爬虫下载美女图片
Jul 14 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
python顺序执行多个py文件的方法
Jun 29 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Pytorch之卷积层的使用详解
Dec 31 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
Python selenium实现断言3种方法解析
Sep 08 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树的代码,可以嵌套任意层
2006/10/09 PHP
PHP语法速查表
2007/01/02 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
php-app开发接口加密详解
2018/04/18 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
use jscript List Installed Software
2007/06/11 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
在vue-cli中组件通信的方法
2017/12/16 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python画图学习入门教程
2016/07/01 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
wxPython实现分隔窗口
2019/11/19 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
世界文化遗产导游词
2019/08/07 职场文书