问题

找出从自然数1、2、3、...、n中任取r个数的所有组合。

例如,n=5,r=3的所有组合为:
1,2,3
1,2,4
1,2,5
1,3,4
1,3,5
1,4,5
2,3,4
2,3,5
2,4,5
3,4,5

分析

换个角度,r=3的所有组合,相当于元素个数为3的所有子集。因此,在遍历子集树的时候,对元素个数不为3的子树剪枝即可。

注意,这里不妨使用固定长度的解。

直接套用子集树模板。

代码


'''数字组合问题'''n = 5
r = 3
a = [1,2,3,4,5] # 五个数字x = [0]*n # 一个解(n元0,1数组) 固定长度
X = []    # 一组解def conflict(k):global n, r, xif sum(x[:k+1]) > r: # 部分解的长度超出rreturn Trueif sum(x[:k+1]) + (n-k-1) < r: # 部分解的长度加上剩下长度不够rreturn Truereturn False # 无冲突# 套用子集树模板
def comb(k): # 到达第k个元素global n, x, Xif k >= n:  # 超出最尾的元素#print(x)X.append(x[:]) # 保存(一个解)else:for i in [1, 0]: # 遍历元素 a[k] 的两种选择状态:1-选择,0-不选x[k] = iif not conflict(k): # 剪枝comb(k+1)# 根据一个解x,构造对应的一个组合
def get_a_comb(x):global areturn [y[0] for y in filter(lambda s:s[1]==1, zip(a, x))]# 根据一组解X,构造对应的一组组合
def get_all_combs(X):return [get_a_comb(x) for x in X]# 测试
comb(0)
print(X)
print(get_all_combs(X))

效果图

python 回溯法 子集树模板 系列 —— 4、数字组合问题相关推荐

  1. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

  2. python 回溯法 子集树模板 系列 —— 1、8 皇后问题

    问题 8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 分析 为了简化问题,考虑到8个皇后不同行,则每一行放置一个皇后,每一行的 ...

  3. python 回溯法 子集树模板 系列 —— 5、取物搭配问题

    问题 有5件不同的上衣,3条不同的裤子,4顶不同的帽子,从中取出一顶帽子.一件上衣和一条裤子作为一种搭配,问有多少种不同的搭配? 分析 换个角度看,现有头.身.腿三个元素,每个元素都有各自的几种状态. ...

  4. python 回溯法 子集树模板

    回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足 ...

  5. python回溯算法全排列_python 回溯法 子集树模板 系列 —— 11、全排列

    问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...

  6. 八皇后问题python回溯_解决Python基于回溯法子集树模板实现8皇后问题

    这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下 本文实例 ...

  7. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例

    本文实例讲述了Python基于回溯法子集树模板解决找零问题.分享给大家供大家参考,具体如下: 问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元, ...

  8. python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例

    本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题.分享给大家供大家参考,具体如下: 问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入 ...

  9. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例

    本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...

  10. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例

    本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...

最新文章

  1. 对一条常用命令(netstat结合awk统计TCP连接数)的理解
  2. win7中安装mysql_windows7下安装Mysql5.6数据库图文教程(压缩包安装)
  3. CSS Media媒体查询
  4. [最新答案V0.4版]微软等数据结构+算法面试100题[第41-60题答案]
  5. intellij出现Initial job has not accepted any resources;
  6. 导入功能 php,php Excel 导入功能
  7. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)
  8. 合肥工业大学机器人技术期末_机器人技术第三次作业(HFUT)
  9. bzoj3143: [Hnoi2013]游走
  10. python右对齐乘法表_python如何打印99乘法表
  11. 界面的创建(高仿QQ登入界面)
  12. 电动汽车动力系统整车仿真,具有双向DCDC变换器实现能量反馈,可带异步电机
  13. python怎么退出窗口_关闭pyplot窗口
  14. 【汇编作业记录Proteus8+keil5 作业 2】
  15. Arcgis API For js 的离线部署
  16. CAN笔记(17) 预定义报文ID
  17. 微信小程序连接mysql
  18. 【FinE】FamaFrench 5 Factors asset pricing Model(FF五因子模型)
  19. 【安全牛学习笔记】POP3
  20. 制造业从中国回流英国 英媒:工业史上的奇妙反转

热门文章

  1. 软件系统架构师大概工作过程
  2. 线程中消费者生产者的实例代码(synchronized关键字)
  3. 网络干货,无论是运维还是开发都要知道的网络知识系列之(八)
  4. 数据抽取工具——DMCTextFilter V4.2(纯文本抽出通用程序库)
  5. js简单操作Cookie
  6. 返回零长度的数组或者集合,而不是null
  7. 通过SessionID和用户名来保证同一个用户不能同时登录
  8. 图像读取函数cv::imread()的几种使用方式
  9. 本地项目部署到服务器 启动 报错 数据表不存原因 解决
  10. Linux基础四---系统监控硬盘分区