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 ...
随机推荐
- 基于标准库的string类实现简单的字符串替换
感觉基本功还是不扎实,虽然能做些程序但是现在看来我还是个初学者(primer),试着完成习题结果还得修修改改. 废话不多说,实现功能很简单,<C++ Primer>9.5.2节习题. // ...
- JDK 9 & JDK 10 新特性
JDK 9 新增了不少特性,官方文档:https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-527735CF-44E1-4144-9 ...
- Hibernate学习7—Hibernate 映射继承
需求:学生有很多照片,分为生活照和工作照: 第一节:每个具体类对应一个表 Student.java: package com.cy.model; import java.util.Set; publi ...
- java代码---------计算器实现
总结:虽然,没有人会帮你到底,凭什么要对你怜香惜玉 注意实现哪一个运算就把相关代码放在else if这个判断语句里面 package com.rue; import java.awt.BorderLa ...
- Java中的构造方法总结
Java中的构造方法总结 时间: 2013-11-05 08:49 来源: 未知 作者: 站长部落 点击: 1752 次 今天写代码突然发现Java的构造方法也有不少说法呢,闲来无事,总结一下: ...
- 示例文件下载demo
页面: 后台: package com.js.ai.modules.shwindow.util; import java.io.BufferedInputStream; import java.io. ...
- JasperReport报表导出踩坑实录
写在最前面 翻了翻博客,因为太忙,已经好久没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六月份的时候写过一篇利用poi文件导入导出的小De ...
- leetcode hashmap
187. Repeated DNA Sequences 求重复的DNA序列 public List<String> findRepeatedDnaSequences(String s) { ...
- Django学习---CSRF
CSRF xss攻击:假设我们网站的评论里面允许用户写js的时候,每个人就会看到页面会执行这个js代码,有的是alert,不停的跳出弹框.这个还不算严重的,关键是如果js代码运行的结果不显示在页面上, ...
- Proof for Floyd-Warshall's Shortest Path Derivation Algorithm Also Demonstrates the Hierarchical Path Construction Process
(THIS BLOG WAS ORIGINALLY WRTITTEN IN CHINESE WITH LINK: http://www.cnblogs.com/waytofall/p/3732920. ...