STL: el uso de las funciones next_permutation () y prev_permutation ()

archivo de cabeza<algorithm>

La función de next_permutation () es generar todas las permutaciones que son más grandes que la permutación actual, en orden ascendente.
La función de prev_permutation () es generar todas las permutaciones que son más pequeñas que la permutación actual, en orden descendente.

Descripción del algoritmo:

Encuentra dos elementos adyacentes desde la cola hacia adelante

El primer elemento i, el segundo elemento j (contado de adelante hacia atrás), y i <j

2. Encuentre el primer elemento k más grande que i desde el extremo hacia el frente. Intercambiar i y k

3. Los elementos en el rango de [j, último) están invertidos (dispuestos al revés)

código next_permutation

int a[];
do
{
    
    

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

El siguiente código puede producir la matriz completa de 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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_46703995/article/details/112995894
Recomendado
Clasificación