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实现爬虫下载漫画示例
Feb 16 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python实现冒泡排序的简单应用示例
Dec 11 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
pytorch打印网络结构的实例
Aug 19 Python
Python求正态分布曲线下面积实例
Nov 20 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
Python yield生成器和return对比代码实例
Apr 20 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 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
晶体管来复再生式二管收音机
2021/03/02 无线电
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
详解Vue之计算属性
2020/06/20 Javascript
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python实现代码统计工具
2019/09/19 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
Python流程控制常用工具详解
2020/02/24 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
网管求职信
2014/03/03 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
助学感谢信范文
2015/01/21 职场文书
离婚起诉书范本
2015/05/18 职场文书
羊脂球读书笔记
2015/06/30 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL