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 切片和range()用法说明
Mar 24 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Fabric 应用案例
Aug 28 Python
深入探究Django中的Session与Cookie
Jul 30 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
Python内置模块logging用法实例分析
Feb 12 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
python使用turtle库绘制时钟
Mar 25 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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函数解决SQL injection
2006/10/09 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
Python使用wxPython实现计算器
2018/01/30 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python 字典套字典或列表的示例
2019/12/16 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
优秀会计求职信
2014/07/04 职场文书
转让协议书范本
2014/09/13 职场文书
公司离职证明标准样本
2014/10/05 职场文书
小学母亲节活动总结
2015/02/10 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL