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 ...
随机推荐
- 阿里云视频点播 php开发
先购买开通阿里云的<视频点播>服务,视频点播 可以购买套餐 ,我在项目中使用的是299套餐 开发前在<用户信息管理>生成Access Key Secret,开发密钥使用 阿里云 ...
- Web API 路由访问设置
前段时间一直致力于MVC webapi 技术的研究,中途也遇到过好多阻碍,特别是api路由的设置和URL的访问形式,所以针对这个问题,特意做出了记录,以供日后有同样困惑的大虾们借鉴: 在Mvc WEB ...
- erlang的lists笔记
一般循环用在遍历列表的时候,erlang有lists模块直接支持遍历,不需要自己写尾递归遍历list lists:foreach 用来遍历列表,不保存结果,最后一次返回ok lists:map 遍历列 ...
- Ninject Lazy Load
namespace LayzyLoadTest { [TestClass] public class UnitTest1 { private IKernel InitKernel() { Ninjec ...
- linux tcp server demo
#include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <ne ...
- Java中的强制类型转换
例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...
- zookeeper基本讲解(Java版,真心不错)
1. 概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核 ...
- python解析时间格式脚本
对于这种时间格式:發表於: 星期一 五月 28, 2012 6:59 am import re INPUT = "發表於: 星期一 五月 28, 2012 6:59 am 文章主題: 對&l ...
- Joker的运维开发之路
python 1--数据类型,流程控制 2--数据类型详细操作,文件操作,字符编码 https://mp.weixin.qq.com/s/i3lcIP82HdsSr9LzPgkqww 点开更精彩 目前 ...
- node的模块管理
/* *一:从node_modules目录中加载模块; * 向这样的写法: * require("aa.js") * 则node将aa.js文件视为node_modules目录下的 ...