C++ STL 全排列函数
C++ 全排列函数。。。一听名字就在<algorithm>中。。。
首先第一个说的是next_permutation:
#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.
从说明中可以看到 next_permutation 的返回值是布尔类型。
注意说明中说的前闭后开区间;
下面是我打的一段程序说明函数:
#include <iostream>
#include <algorithm>
#include <string>
#include <functional>
using namespace std; int main()
{
string str;
cin >> str;
long long ans=;
sort(str.begin(), str.end(),less<char>());//升序排列
cout << str << endl;
while (next_permutation(str.begin(), str.end()))
{
cout << str << endl;
ans++;
}
cout<<"the next string:"<<str<<endl;
cout<<"total forms:"<<ans<<endl;
return ;
}
//在STL中,除了next_permutation外,还有一个函数prev_permutation,
//两者都是用来计算排列组合的函数。前者是求出下一个排列组合,而后者
//是求出上一个排列组合。所谓“下一个”和“上一个”,书中举了一个简单的例子:
//对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,
//c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},
//同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},
//其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。
/*
用next_permutation和prev_permutation求排列组合很方便,
但是要记得包含头文件#include <algorithm>。
虽然最后一个排列没有下一个排列,用next_permutation会返回false,
但是使用了这个方法后,序列会变成字典序列的第一个,如cba变成abc。prev_permutation同理。
*/
代码+说明
2.prev_permutation
上一个代码内讲到了它
这就不细说了:
//prev_permutation #include <iostream>
#include <algorithm>
#include <string>
#include <functional>
using namespace std; int main()
{
string str;
cin >> str;
long long ans=;
sort(str.begin(), str.end(),greater<char>());//降序排列
cout << str << endl;
while (prev_permutation(str.begin(), str.end()))
{
cout << str << endl;
ans++;
}
cout<<"the next string:"<<str<<endl;
cout<<"total forms:"<<ans<<endl;
return ;
}
//在STL中,除了prev_permutation外,还有一个函数next_permutation,
//两者都是用来计算排列组合的函数。前者是求出下一个排列组合,而后者
//是求出上一个排列组合。所谓“下一个”和“上一个”,书中举了一个简单的例子:
//对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,
//c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},
//同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},
//其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。
/*
33 用next_permutation和prev_permutation求排列组合很方便,
34 但是要记得包含头文件#include <algorithm>。
35 虽然第一个排列没有上一个排列,用prev_permutation会返回false,
36 但是使用了这个方法后,序列会变成字典序列的最后一个,如abc变成cba。next_permutation同理。
37 */
程序+说明
直接上代码
部分转载自:http://leonard1853.iteye.com/blog/1450085
以上完毕。
C++ STL 全排列函数的更多相关文章
- 2017年上海金马五校程序设计竞赛:Problem A : STEED Cards (STL全排列函数)
Description Corn does not participate the STEED contest, but he is interested in the word "STEE ...
- C++ STL 全排列函数详解
一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a ...
- POJ1833 排列 调用全排列函数 用copy函数节省时间 即使用了ios同步代码scanf还是比较快
排列 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 21268 Accepted: 8049 Description 题 ...
- next_permutation() 全排列函数
next_permutation() 全排列函数 这个函数是STL自带的,用来求出该数组的下一个排列组合 相当之好用,懒人专用 适用于不想自己用dfs写全排列的同学(结尾附上dfs代码) 洛谷oj可去 ...
- ACM题目————STL + 全排列
今天碰到一个函数,感觉挺好用的,全排列函数 next_permutation! 求全排列的函数,基本上与自己写的DFS时间复杂度差不多,毕竟是标准库.(2018-1-4 添加) 话不多说,直接上题. ...
- 分享stl sort函数坑点导致coredump问题
在<Effective STL> 的条款21中就有讨论:永远让比较函数对相同元素返回false! 也就是说在实现stl sort函数自定义比较器时,一定要满足这种严格弱序化的问题.
- STL - next_permutation 全排列函数
学习: http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html http://blog.csdn.net/ac_gibson/article/deta ...
- C++ 全排列函数 nyoj 366
C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.st ...
- C++ 全排列函数 std::next_permutation与std::prev_permutation
C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.st ...
随机推荐
- 理解加密算法——创建CA机构,签发证书并开始TLS通信
1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下,NODE.JS代码: TCP Server: const net=requir ...
- python TypeError: unsupported operand type(s) for +: 'int' and 'str' [closed]
TypeError: unsupported operand type(s) for +: 'int' and 'str' [closed] sql="insert into auto_tr ...
- Netty--使用TCP协议传输文件
简介: 用于将文件通过TCP协议传输到另一台机器,两台机器需要通过网络互联. 实现: 使用Netty进行文件传输,服务端读取文件并将文件拆分为多个数据块发送,接收端接收数据块,并按顺序将数据写入文件. ...
- python md5 请求 构造
-----------------md5加密的方法:---------------------------------- import hashlib m = hashlib.md5() ...
- https 请求的端口是443 注意
注意: 这里录制https的请求 端口号一定是443 才可以抓取到!!!!!! (进坑多次)
- Jmeter录制App 请求是HTTPS的
1.jmeter开启代理后,在bin目录下找到 证书 2.把这个证书通过QQ发送到手机上面,使用QQ浏览器打开 安装证书,信任证书 3.jmeter里点击SSl管理器选择上面的证书(这部貌似为了抓浏览 ...
- PHP中实现函数重载
转载自:http://cnn237111.blog.51cto.com/2359144/1284085 由于PHP是弱类型语言,因此函数的输入参数类型无法确定(可以使用类型暗示,但是类型暗示无法用在诸 ...
- (转)使用 linux tar 命令压缩与解压文件
原文链接 http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html tar -c: 建立压缩档案-x:解压-t:查看内容-r: ...
- Centos 部署Cobbler系统
一.简介 Cobbler 可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学会.(~..~) 二.安装环境以及资 ...
- Java EE学习路线
题记: 不行动,注定是个失败者! 1.coding:servlet->jsp 通过看视频快速上手 2.reading:Thinking in java 英文版 时间协调安排: 1.上课时认真听课 ...