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基础教程之Hello World!
Aug 29 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
老生常谈python的私有公有属性(必看篇)
Jun 09 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
python tkinter窗口最大化的实现
Jul 15 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 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/03 咖啡文化
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
详解python进行mp3格式判断
2016/12/23 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
工作会议欢迎词
2014/01/16 职场文书
小学开学寄语
2014/01/19 职场文书
元宵晚会主持词
2014/03/25 职场文书
档案保密承诺书
2014/06/03 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL