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 相关文章推荐
windows下ipython的安装与使用详解
Oct 20 Python
Python之os操作方法(详解)
Jun 15 Python
python下载图片实现方法(超简单)
Jul 21 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
ubuntu上安装python的实例方法
Sep 30 Python
python hashlib加密实现代码
Oct 17 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 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无限遍历目录示例
2014/02/21 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
php 常用的系统函数
2017/02/07 PHP
JS日历 推荐
2006/12/03 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
javascript preload&lazy load
2010/05/13 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
用python找出那些被“标记”的照片
2017/04/20 Python
python使用tkinter实现简单计算器
2018/01/30 Python
Python 监测文件是否更新的方法
2019/06/10 Python
浅谈Python 递归算法指归
2019/08/22 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
pymysql模块的操作实例
2019/12/17 Python
Python常用库大全及简要说明
2020/01/17 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
高校毕业生自我鉴定
2013/10/27 职场文书
办公室文秘岗位职责
2013/11/15 职场文书
医学类导师推荐信范文
2013/11/19 职场文书
2015年征兵工作总结
2015/07/23 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫