¿Cuál es la base de la función next_permutation en la biblioteca STL de C++? Mira algunos conjuntos de números.
La función exactamente opuesta es prev_permission */
// ( 1)?int? Siguiente _Sustitución de tipo
int? principal()
{
int? a[3];
a[0]= 1; a[1]= 2; a[2]= 3;
Hacer
{
cout & lt& lta[0]& lt;& lt"?"& lt& lta[1]& lt;& lt"?"& lt& lta[2]& lt;& ltendl
}?¿Cuándo? (siguiente_permutación (a, a+3));? // El parámetro 3 se refiere a la longitud a organizar.
//Si hay una permutación después, devuelve verdadero. Si A es la última permutación sin un sucesor, devuelve falso. Cada vez que se ejecuta, A se convierte en su sucesor.
}
Salida:
1?2?三
1?3?2
2? 1?三
2?3?1
3?1?2
3?2?1
¿Qué pasa si es reemplazado? while(next_permutation(a, a+2));
Luego genera:
1?2?三
2?1?三
Los diccionarios sólo clasifican los dos primeros elementos.
Evidentemente, ¿y si fuera sustituido? while(siguiente_permutación(a, a+1));? Sólo salida: 1? 2? Tres
Si la permutación es la más grande y no tiene sucesor, next_permutation ordenará la permutación en orden ascendente del diccionario, lo que equivale a un bucle.
int? lista[3]={3, 2, 1};
next_permutation(lista, lista+3);
cout & lt& ltlist[0]& lt;& lt" ? "& lt& ltlist[1]& lt;& lt"?"& lt& ltlist[2]& lt;& ltendl
//Salida:? 1?2?三
(2)?Char? Siguiente _Sustitución de tipo
int? Señor()
{
¿Ciel? ch[205];
cin? >>? ch;
Sort(ch,ch?+?strlen(ch)?);
//Esta declaración ordena la matriz de entrada en orden ascendente del diccionario. Por ejemplo, ingrese 9874563102? cout<<ch;? Generará 0123456789, por lo que se puede generar el arreglo completo.
¿Ciel? *¿primero? =?ch;
¿Carácter? *¿por fin? =?ch? +?strlen(ch);
¿Qué hacer? {
cout & lt& lt? ¿ch? <<? endl
} while(next_permutation(first, last));
¿Regresar? 0;
}
// De esta manera, no es necesario saber el tamaño del canal de antemano, sino ordenar toda la cadena de canales.
//¿Y si adoptamos? while(siguiente_permutación(ch, ch+5));? Si simplemente ingresa 1562, obtendrá un error porque el quinto elemento en ch apunta a desconocido.
//Para ordenar toda la cadena, el parámetro 5 se refiere a la longitud de la matriz sin terminador.
(3)?¿Cadena? Siguiente _Sustitución de tipo
int? main()
{
¿Cadena? Línea;
Y (CIN>>Línea y línea. & amp línea!="#")
{
if(next_permutation(line .begin() , línea.end()))? //Comienza desde la posición de entrada actual
cout & lt& ltline & lt& ltendl
¿Y si? cout & lt& lt"sin sucesor\n";
}
}
int? main()
{
¿Cadena? Línea;
Y(CIN>>Line&Line.& LINE!="#")
{
sort(line.begin (), línea . end( )); // Disposición completa
cout & lt& ltline & lt& ltendl
while(next _ permutation(line . Begin(), line.end ()))
cout & lt& ltline & lt& ltendl
}
}
¿Next_arrange? Función de comparación personalizada
# include & ltiostream & gt? //poj? 1256?Anagramas
# include & ltString& gt
# include & ltAlgorithm& gt
¿Usar? ¿Espacio de nombres? std
int? cmp(char? 一, char? b)? //' A ' & lt; a ' & ltB ' & ltb ' & lt...& ltZ ' & ltz '.
{
if(tolower(a)!=tolower(b))
¿Volver? bajar(a)<bajar(b);
Otros
¿Volver? a<b;
}
int? Señor()
{
¿Ciel? ch[20];
int? n;
CIN>& gtn;
mientras(n -)
{
scanf("%s ", ch) ;
sort(ch, ch+strlen(ch), CMP);
Hacer
{
printf(" %s \n ",ch);
} while(next_permutation(ch,ch+strlen(ch),CMP));
}
¿Regresión? 0;
}