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;
}