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 isinstance函数介绍
Apr 14 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
python中while和for的区别总结
Jun 28 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
Python绘制热力图示例
Sep 27 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
在python中使用nohup命令说明
Apr 16 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Django实现随机图形验证码的示例
Oct 15 Python
Python如何急速下载第三方库详解
Nov 02 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
php类中private属性继承问题分析
2012/11/01 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
在Python中移动目录结构的方法
2016/01/31 Python
基于python的字节编译详解
2017/09/20 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
Pandas分组与排序的实现
2019/07/23 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
销售工作岗位职责
2013/12/24 职场文书
《尊严》教学反思
2014/02/11 职场文书
小学生元旦感言
2014/02/26 职场文书
2015年教师节主持词
2015/07/03 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript