全排列函数——next_permutation() & prev_permutation()

******fighting******
#include<algorithm>
next_permutation():求下一个排列组合
prev_permutation():求上一个排列组合
eg:{a,b,c}的下一个排列组合是{a,c,b},则{a,c,b}的上一个排列组合是{a,b,c}
(1)
int a[3]={1,2,3};
next_permutation(a,a+3)如果存在下一个排列组合,返回true,否则返回false。
参数:需要全排列的起始地址、终止地址
(2)
string str="aabbbccc";
do
{
......
}
while(next_permutation(str.begin(),str.end()));

注意:首先对于待全排列的序列,如果是{2,1,3},则next_permutation()最后一个排序是{3,2,1},即序列中的每个元素组成的数字呈升序排列,因此不会出现{1,2,3}这种比{2,1,3}小的序列。同理,还以{2,1,3}为例,对于prev_permutation()而言,最后一个排序是{1,2,3},呈降序排列,不会出现比{2,1,3}还大的序列。
       因此,要想求任意一个序列的所有全排列,首先将序列使用sort函数升序排列,即求出组合数最小的那个序列{1,2,3},然后再使用next_permutation(),这样就可以得到所有的排列组合;或者,先降序排列,然后使用prev_permutation()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值