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利用hook技术破解https的实例代码
Mar 25 Python
python插入数据到列表的方法
Apr 30 Python
Python中基础的socket编程实战攻略
Jun 01 Python
Python 操作MySQL详解及实例
Apr 30 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
Python金融数据可视化汇总
Nov 17 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
Django 路由控制的实现代码
Nov 08 Python
python取余运算符知识点详解
Jun 27 Python
如何使用python操作vmware
Jul 27 Python
python tkinter实现彩球碰撞屏保
Jul 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
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
英国袜子店:Sock Shop
2017/01/11 全球购物
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
致200米运动员广播稿
2014/02/06 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
信息技术课教学反思
2016/02/23 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书