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实现读取命令行参数的方法
May 22 Python
在Python中操作时间之mktime()方法的使用教程
May 22 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
python实现超市扫码仪计费
May 30 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
python基于opencv检测程序运行效率
Dec 28 Python
Django-xadmin+rule对象级权限的实现方式
Mar 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截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
JS解析XML实例分析
2015/01/30 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
js实现打字小游戏
2019/12/17 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python多线程同步之文件读写控制
2021/02/25 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
大型会议接待方案
2014/03/01 职场文书
给校长的建议书
2014/03/12 职场文书
四风问题查摆材料
2014/08/25 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
2014年党小组工作总结
2014/12/20 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android