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写入xml文件的方法
May 08 Python
Python实现给qq邮箱发送邮件的方法
May 28 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
python select.select模块通信全过程解析
Sep 20 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
python生成九宫格图片
Nov 19 Python
python实现杨氏矩阵查找
Mar 02 Python
wxPython之wx.DC绘制形状
Nov 19 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
python实现KNN近邻算法
Dec 30 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使之能同时支持GIF和JPEG
2006/10/09 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
vue ssr 指南详读
2018/06/29 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
js的对象与函数详解
2019/01/21 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
JS如何生成动态列表
2020/09/22 Javascript
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
时尚休闲吧创业计划书
2014/01/25 职场文书
抽奖活动主持词
2014/03/31 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书