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命名空间详解
Aug 18 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python中open函数的基本用法示例
Sep 07 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
如何在Windows中安装多个python解释器
Jun 16 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
Python的三个重要函数详解
Jan 18 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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(7) php 字符串相关应用
2010/03/05 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
Seajs的学习笔记
2014/03/04 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
Python使用post及get方式提交数据的实例
2019/01/24 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
c语言常见笔试题总结
2016/09/05 面试题
解释下面关于J2EE的名词
2013/11/15 面试题
大学生入党自我鉴定
2013/10/31 职场文书
和平主题的演讲稿
2014/01/12 职场文书
四年级语文教学反思
2014/02/05 职场文书
社区消防工作实施方案
2014/03/21 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
离婚案件原告代理词
2015/05/23 职场文书
公司财务管理制度
2015/08/04 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang