next_permutation( ) 和prev_permutation( ) 全排列函数

头文件#include <algorithm>

两者都是用来计算排列组合的函数。前者是求出下一个排列组合,而后者是求出上一个排列组合。

所谓“下一个”和“上一个”,有一个例子;

对序列 {a, b, c}, a > b >c,它的下一个序列即为{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( (start,end );

用next_permutation和prev_permutation求排列组合很方便,但是要记得包含头文件#include <algorithm>。

虽然最后一个排列没有下一个排列,用next_permutation会返回false,但是使用了这个方法后,序列会变成字典序列的第一个,

如cba变成abc。prev_permutation同理

时间: 2024-10-05 23:26:37

next_permutation( ) 和prev_permutation( ) 全排列函数的相关文章

STL具体操作之next_permutation和prev_permutation函数

 next函数默认的是从小到大的顺序,pre函数默认的是从大到小的顺序: {3,1,2}用next得到的结果是{3,1,2}和{3,2,1}: 用pre得到的结果是{3,1,2},{2,3,1},{2,1,3},{1,3,2,},{1,2,3}: 原理如下: [STL]next_permutation的原理和使用 1.碰到next_permutation(permutation:序列的意思) 今天在TC上碰到一道简单题(SRM531 - Division Two - Level One),是

STL中关于全排列next_permutation以及prev_permutation的用法

这两个函数都包含在algorithm库中.STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation. 一.函数原型 首先我们来看看这两个函数的函数原型: next_permutation: 1 template< class BidirIt >bool next_permutation( BidirIt first, BidirIt last ); 2 template< class BidirIt, class Compare

【转】next_permutation和prev_permutation(STL库中的全排列函数)用法

这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm> 下面是以前的笔记    与之完全相反的函数还有prev_permutation,查询当前排序上一个字典序.   返回为bool型,若返回true则成功生成,返回false则失败,还原到升序或降序的排列,与sort连用风味更佳   (1) int 类型的next_permutation   int main() {  int a[3]; a[0]=1;a[1]=2;a[2]=3;  do { cout<

STL全排列算法next_permutation和prev_permutation

全排列的问题取决于如何找到"下一个",然后就用同样的方法找到全部的排列 全排列这个问题其实和我们数数:11,12,13,14,15,16,17,18,19,20,21,一样的规律,只不过他的变化只要那固定的几个数自每次都出现,这就导致我们传统的连续整数会在那里丢失一部分:你如何对剩下的这些全排列中的数字看成是"连续的"一列数字,对于"第一个""最小的数字"找到它的"下一个",然后用同样的方法找到再"

STL next_permutation和prev_permutation函数

利用next_permutation实现全排列升序输出,从尾到头找到第一个可以交换的位置, 直接求到第一个不按升序排列的序列. 1 #include <iostream> 2 #include <algorithm> /// next_permutation, sort 3 #define MAX 100 4 using namespace std; 5 6 int main() { 7 int myints[MAX],n; 8 cin >> n; 9 for (int

HDU 1027 Ignatius and the Princess II[DFS/全排列函数next_permutation]

Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9458    Accepted Submission(s): 5532 Problem Description Now our hero finds the door to the BEelzebub feng5166. He op

C++ STL 全排列函数详解

一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a,b,c的全排列一共有3!= 6 种 分别是{a, b, c}.{a, c, b}.{b, a, c}.{b, c, a}.{c, a, b}.{c, b, a}. 二.常用操作 1.头文件 #include <algorithm> 2.使用方法 这里先说两个概念:"下一个排列组合&qu

C++ 全排列函数 nyoj 366

C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.std::prev_permutation提供降序. 1.std::next_permutation函数原型 template <class BidirectionalIterator> bool next_permutation (BidirectionalIterator first, Bidir

C++ STL:next_permutation和prev_permutation

两个函数都在#include <algorithm>里 顾名思义,next_permutation用来求下一个排列,prev_permutation用来求上一个排列. 当前的排列不满足函数能够继续执行的条件的时候,返回false,否则返回true 比如数组中已经是1,2,3,4,5了,就不能用prev_permutation了 #include <bits/stdc++.h> using namespace std; int main () { int data[5]={1,2,3