算法竞赛入门经典:第七章 暴力求解法 7.7解答树

本文介绍了解答树的概念及其在排列递归中的应用。通过C++的next_permutation函数,展示了如何生成字典序排列并遍历所有可能的排列组合。核心在于排序数组并使用do-while循环确保不会遗漏最小排列。
摘要由CSDN通过智能技术生成
/*
解答树:
以下的树显示了排列递归函数的调用过程。
                                                            (****)
            (1***)                         (2***)                          (3***)                       (4***)
(12**)    (13**)   (14**)    (21**)  (23**)(24**)         (31**)  (32**)   (34**)        (41**)  (42**)   (43**)
(123*)(124*)
(1234)

特点:
第0层有n个儿子,第一层各节点各有n-1个儿子,第二层各有n-2个儿子,第n层节点没有儿子。每个叶子对应一个排列,共有n!个叶子。这棵树展示的是:
从什么都没做到逐步生成完整解的过程。

解答树特点:多步骤,多选择,用递归
0层:1个节点,1层:n个节点,2层:n*(n-1),第3层:n*(n-1)*(n-2),第n层:n*(n-1)*(n-2)*(n-3)*...*1 = n!个节点。
T(n) = 
多数情况下:解答树上所有节点来源于最后一两层

下一个排列:
枚举所有排列新方法:从字典序最小排列开始,不停调用"求下一个排列"的过程,用C
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值