problema
Supongamos {1, 2, 3, ... n}
secuencia tal, encontrará toda la gama completa de esta secuencia.
la solución de las ideas
En primer lugar hay n posibilidades, determinados después de la primera es para resolver los restantes n - un arreglo del problema de los datos, por lo que se puede descomponer el problema ha sido hacia abajo, hasta que al final de la secuencia, que es la condición de terminación.
La primera disposición de bit de (no recursivo)
2. 3. 1 2. 1. 3 . 3. 1 2
no considera el problema de la repetida elemento de secuencia, la secuencia de prueba {1,2,3}
#include <la iostream> el uso de espacio de nombres STD; void Perm ( int Lista [], int desde , int n-) { para ( int I = de ; I <n-; I ++ ) { el canje (Lista [ de ], List [I]) ; // intercambiar una disposición de salida de uno lleno para ( int I = 0 ; I <n-; I ++ ) COUT << Lista [I] << " " ; COUT << endl; // asegurarse de secuencia de intercambio antes o {1, 2, 3} swap (lista [ de ], lista [i]); } } Int main () { int lista [] = { 1 , 2 , 3 }; Perm (lista, 0 , 3 ); volver 0 ; }
La disposición de los (recursiva No. 2, No. 3)
1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2
#include <la iostream> el uso de espacio de nombres STD; void Perm ( int Lista [], int desde , int n-) { // bucle condición de terminación IF ( de == n-) { // el intercambio de una disposición de salida de uno lleno para ( int I = 0 ; I <n-; I ++ ) COUT << Lista [I] << " " ; COUT << endl; retorno ; } para ( int I = desde; I <n-; I ++ ) { el canje (Lista [ de ], List [I]); // añadido de forma recursiva Perm (Lista, de + 1 , n-); // asegurarse de secuencia de intercambio antes o {1, 2, 3 } el canje (Lista [ de ], List [I]); } } int main () { int Lista [] = { 1. , 2 , 3. }; Perm (List, 0 , 3. ); retorno 0 ; }