stl 全排列

STL提供了两个函数,next_permutation , prev_permutation 用于全排列;

以next_permutation为例

template <class BidirectionalIterator>

  bool next_permutation (BidirectionalIterator first,

                         BidirectionalIterator last );

当存在下一个全排列时,函数返回true。

以int num[n]为例;

1.next_permutation(),若要得到全排列的全部结果,需先将数组num[]内数据由小到大先sort()排序好,输出顺序按字典顺序从小到大。若全排列对象类型为自定义结构体,需要自定义比较函数cmp.格式为next_permutation(num,num+k,cmp);

  ------------------------------------test 1----------------------------------------------------------

   int num[3]={3,2,1};
    sort(num,num+3);
    do{
        printf("%d%d%d\n",num[0],num[1],num[2]);
    }while(next_permutation(num,num+3));//对num的前三个元素进行全排列;

 //输出结果:

  123

  132

   213

   231

   312

   321

   ---------------------------------test 2-------------------------------------------------------------

//如果没有对数组进行从小到大排序,则

  int num[3]={3,2,1};
  //  sort(num,num+3);
    do{
        printf("%d%d%d\n",num[0],num[1],num[2]);
    }while(next_permutation(num,num+3));//对num的前三个元素进行全排列;

   //输出结果:

     321             //因为按字典顺序,原排列321已经是全排列中最大的数了,没有下一个比它更大的了.

  ------------------------------------test 3----------------------------------------------------------

  //对数组前k个元素进行全排列

  int num[3]={3,2,1};
    sort(num,num+3);
    do{
        printf("%d%d%d\n",num[0],num[1],num[2]);
    }while(next_permutation(num,num+2));//对num的前2个元素进行全排列;

  //输出结果:

    123

    213 

  2.使用prev_permutation(),要得到全部排列结果,则需要将num[]按从大到小的顺序先排好,输出顺序按字典顺序从大到小.(使用与next_permutation相同)


练习题 nyoj 366  nyoj 19



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值