next_permutation 与 prev_permutation的用法 (全排列)
2013-09-01 17:33
375 查看
个人在做了hdu 1027之后觉得通过代码来直接操作实现一组数的递增递减实在是太牛,我没法很好的运用,所以还是好
好用 STL 的现成的比较好吧,那么介绍一下这两个究竟该怎么用吧。
这段英文的意思它返回的是布尔型的,true or false,对于next_permutation这种类型来说,举个例子,123这组数列,当换到321时,已经不能再大了,所以返回false;
实现原理是
在当前序列中,从尾端往前寻找两个相邻元素,前一个记为*i,后一个记为*ii,并且满足*i < *ii。然后再从尾端寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第ii个元素之后(包括ii)的所有元素颠倒排序,即求出下一个序列了。
prev_permutation也是同样的相似的想法。
简单代码如下
可以通过for循环来实现变换次数,如 hdu 1027
好用 STL 的现成的比较好吧,那么介绍一下这两个究竟该怎么用吧。
#include <algorithm> bool next_permutation( iterator start, iterator end ); The next_permutation() function attempts to transform the given range of elements [start,end) into the next lexicographically greater permutation of elements. If it succeeds, it returns true, otherwise, it returns false.
这段英文的意思它返回的是布尔型的,true or false,对于next_permutation这种类型来说,举个例子,123这组数列,当换到321时,已经不能再大了,所以返回false;
实现原理是
在当前序列中,从尾端往前寻找两个相邻元素,前一个记为*i,后一个记为*ii,并且满足*i < *ii。然后再从尾端寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第ii个元素之后(包括ii)的所有元素颠倒排序,即求出下一个序列了。
prev_permutation也是同样的相似的想法。
简单代码如下
int main(){ int a[] = {3,1,2}; do{ cout << a[0] << " " << a[1] << " " << a[2] << endl; } while (next_permutation(a,a+3)); return 0; }
可以通过for循环来实现变换次数,如 hdu 1027
相关文章推荐
- 关于全排列 next_permutation() 函数的用法
- next_permutation和prev_permutation函数的用法
- 蓝桥杯 方格填数 DFS 全排列 next_permutation用法
- next_permutation和prev_permutation(全排列)
- 关于全排列 next_permutation() 函数的用法
- STL之全排列next_permutation()函数的用法
- 关于全排列 next_permutation() 函数的用法
- 1256 Anagram 全排列 next_permutation 用法
- 全排列 next_permutation 简单用法
- C++ STL next_permutation() prev_permutation(a,a+n)用法。
- next-permutation与prev-permutation及递归实现全排列
- stl全排列next_permutation()与prev_permutation()函数用法
- next_permutation及prev_permutation
- 用STL的next_permutation算法实现全排列
- STL实现全排列 next_permutation
- 【51nod】1384 全排列 next_permutation
- [STL]next_permutation全排列
- 【STL源码剖析读书笔记】【第6章】算法之next_permutation和prev_permutation算法
- 计算下一个全排列(以STL中的next_permutation为例)
- next_permutation()函数 (数字1~10内实现全排列)