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 ...
随机推荐
- JAVA-Unit03: SQL(基础查询) 、 SQL(关联查询)
Unit03: SQL(基础查询) . SQL(关联查询) 列别名 当SELECT子句中查询的列是一个函数 或者表达式时,那么查询出来的结果集 中对应的该字段的名字就是这个函数或者 表达式的名字.为此 ...
- ruby关于require路径
ruby里面的require说明 require './aaaa' 这种方式,包含的是系统路径 相对路径得用下面的 require_relative "./xxxx" 或者使用这个 ...
- 嵌入式设备snmpd 移植和测试(78K为例)
一.源码目录项内容 agent:编译snmpd程序所需的文件,mibs源文件: apps:其他相关的程序:snmpwalk,snmptrap,snmptest,snmpget,snmpset: mib ...
- 【CSS】文字超出显示省略号&连续字符换行
方法1.多行控制(css3) .text { width: 100%; word-break: break-all; display: -webkit-box; -webkit-line-clamp: ...
- 【转】如何使用JMeter测试Java项目
一. Apache JMeter工具 1)简介 JMeter——一个100%的纯Java桌面应用,它是 Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态 ...
- Log4j.xml配置(rolling示例)
Log4j.xml配置(很详细) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4 ...
- 数据运算+-*/,比较运算符==!=,赋值运算,逻辑运算and,or,not,成员运算in,not in,身份运算is is not,位运算&|,运算符的优先级
取模就是返回余数. 取模的作用主要是来取奇偶数来用的,奇数干嘛,偶数干嘛. 比较运算符: 赋值运算: 逻辑运算: 赋值的时候可以多个变量同时赋值 成员运算: in就是在不在的意思. 身份运算: 位运算 ...
- 小程序scroll-view组件使用时,子元素虽设置样式display:inline-flex;whit-space:nowrap
小程序scroll-view组件使用时,子元素虽设置样式display:inline-flex;whit-space:nowrap
- 016:Explain
一. Explain EXPLAIN 官方文档 1.explain说明 explain是解释SQL语句的执行计划,即显示该SQL语句怎么执行的 使用explain的时候,也可以使用desc 5.6 版 ...
- 003:MySQL账号创建授权以及Workbench
目录 一. 权限管理 1."用户 + IP"的概念 2. 用户权限管理 3. 基本操作 4. 撤销权限 5.授权和创建用户 二. MySQL模拟角色 三. Workbench与Ut ...