博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 回溯法 子集树模板 系列 —— 11、全排列
阅读量:6215 次
发布时间:2019-06-21

本文共 691 字,大约阅读时间需要 2 分钟。

问题

实现 'a', 'b', 'c', 'd' 四个元素的全排列。

分析

这个问题可以直接套用排列树模板。

不过本文使用子集树模板。分析如下:

一个解x就是n个元素的一种排列,显然,解x的长度是固定的,n。

我们这样考虑:对于解x,先排第0个元素x[0],再排第1个元素x[1],...,当来到第k-1个元素x[k-1]时,就将剩下的未排的所有元素看作元素x[k-1]的状态空间,遍历之。

至此,套用子集树模板即可。

代码

'''用子集树实现全排列'''n = 4a = ['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]开始

效果图

709432-20170602072031196-124200334.jpg

转载地址:http://yxsja.baihongyu.com/

你可能感兴趣的文章
Derek解读Bytom源码-孤块管理
查看>>
Kotlin 使用 Spring WebFlux 实现响应式编程
查看>>
ReactNative常用组件汇总
查看>>
用“思维导图”写markdown
查看>>
元高分获数千万Pre-A轮融资,鑫榕启航基金领投,好未来跟投
查看>>
MikroTik RouterOS授权级别
查看>>
如何用C++做游戏(3)
查看>>
session熟知
查看>>
【Web API系列教程】3.9 — 实战:处理数据(添加新条目到数据库)
查看>>
VS2015 个人常用快捷键
查看>>
angularjs新手教程 factory利用callback传递参数的用法
查看>>
和 Pipelining 说再见,cURL 放弃使用管道技术
查看>>
【云吞铺子】阿里云文档开源
查看>>
宣武医院:让物联网为智慧医疗添翼
查看>>
SparkConf加载与SparkContext创建(源码阅读一)
查看>>
swagger-bootstrap-ui 1.9.2 发布,提供前后端分离解决方案
查看>>
Vue 组件库 HeyUI@1.16.0 更新日志
查看>>
Redis在windows下的下载与安装
查看>>
PhpStorm 2018.3.5 发布,PHP 集成开发环境
查看>>
JSP EL表达式学习笔记
查看>>