STL:全排列 next_permutation(), prev_permutation()函数的用法

头文件<algorithm>

next_permutation()函数功能是输出所有比当前排列大的排列,顺序是从小到大。
prev_permutation()函数功能是输出所有比当前排列小的排列,顺序是从大到小。

算法描述:

从尾部开始往前寻找两个相邻的元素

第1个元素i,第2个元素j(从前往后数的),且i<j

2、再从尾往前找第一个大于i的元素k。将i、k对调

3、[j,last)范围的元素置逆(颠倒排列)

next_permutation代码

int a[];
do
{
    
    

}
while(next_permutation(a,a+n));//while(prev_permutation(a,a+n));

可产生1~n的全排列有如下代码:

#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
    
    
    int n;
    while(scanf("%d",&n)&&n){
    
    
        int a[1000];
        for(int i=0;i<n;i++){
    
    
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        do{
    
    
            for(int i=0;i<n;i++)
                printf("%d ",a[i]);
            printf("\n");
        }while(next_permutation(a,a+n));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46703995/article/details/112995894