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 ljust rjust center输出
Sep 06 Python
优化Python代码使其加快作用域内的查找
Mar 30 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
解决Python requests 报错方法集锦
Mar 19 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
Feb 21 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
pip install命令安装扩展库整理
Mar 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
mysql时区问题
2008/03/26 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
javascript学习之json入门
2016/12/22 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python操作列表的常用方法分享
2014/02/13 Python
TensorFlow的权值更新方法
2018/06/14 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python区块及区块链的开发详解
2019/07/03 Python
Python代码注释规范代码实例解析
2020/08/14 Python
python利用faker库批量生成测试数据
2020/10/15 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
关于运动会的广播稿(10篇)
2014/09/12 职场文书
单位委托书怎么写
2014/09/21 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
机关作风建设心得体会
2014/10/22 职场文书
太空授课观后感
2015/06/17 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
python如何进行基准测试
2021/04/26 Python
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS