problema
Suponha {1, 2, 3, ... n}
sequência tal, encontrar toda a gama completa desta sequência.
resolver ideias
Primeiro existem n possibilidades, determinada após o primeiro é o de resolver o restante N - um arranjo o problema de dados, de modo que pode quebrar o problema tem sido para baixo, até que no final da sequência, o que é a condição de terminação.
O primeiro arranjo de bits (não-recursiva)
2. 3. 1 2. 1. 3 . 3. 1 2
não considera o problema de elemento de sequência repetida, a sequência de teste {1,2,3}
#include <o iostream> a usar namespace STD; nula Perm ( int lista [], int de , int n-) { para ( int I = de ; I <n-; i ++ ) { o swap (Lista [ de ], lista [I]) ; // trocar um arranjo de saída completo para ( int I = 0 ; I <N; i ++ ) COUT << Lista [I] << " " ; COUT << endl; // assegurar sequência de troca antes ou {1, 2, 3} swap (lista [ de ], a lista [i]); } } Int main () { int lista [] = { 1 , 2 , 3 }; Perm (lista, 0 , 3 ); retornar 0 ; }
O arranjo de todos (recursiva No. 2, No. 3)
1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2
#include <o iostream> a utilização de espaço de nomes DST; vazio Perm ( int Lista [], int a partir de , int n-) { // condição de terminação circuito IF ( a partir de == N-) { // troca de um arranjo de saída completo para ( int I = 0 ; I <n-; i ++ ) COUT << Lista [I] << " " ; COUT << endl; retorno ; } para ( int I = a partir de; I <N; i ++ ) { a troca (Lista [ de ], Lista [I]); // adicionado recursivamente Perm (Lista, a partir de + 1 , n); // assegurar sequência de troca antes ou {1, 2, 3 } a troca (Lista [ de ], Lista [I]); } } int main () { int Lista [] = { 1. , 2 , 3. }; Perm (Lista, 0 , 3. ); retorno 0 ; }