2012-10-01 15 views
5

Eventuali duplicati:
generate strings with all permutation of charactergeneratore di permutazioni ricorsive per i caratteri

Sono principiante in C++, e ho davvero bisogno del vostro aiuto. Sto facendo un programma per la permutazione usando la ricorsione. Ecco il mio codice ma l'output è strano, ci sono gli stessi numeri che ripetono molte volte e spazi. Non ho potuto scoprire quale sia il problema o forse ho bisogno di aggiungere ancora di più. Mi aiuti per favore. Ecco il mio codice:

#include <iostream> 
using namespace std; 
#define swap(x,y,t) ((t)=(x), (x)=(y), (y)=(t)) 
void perm(char *list, int i, int n); 

int main(){ 
    char a[4]={'a','b','c'}; 
    perm(a,0,3); 
    //cout<<a<<endl;  
    return 0; 
} 

void perm(char *list, int i, int n){ 
    int j, temp; 
    if (i==n){ 
     for (j=0; j<=n; j++) 
      printf("%c", list[j]); 
     printf("  "); 
    } 
    else { 
     for (j=i; j<=n; j++){ 
      swap(list[i],list[j],temp); 
      perm(list,i+1,n); 
      swap(list[i],list[j],temp); 
      cout<<list<<endl; 
     } 
    } 
} 
+0

Si può risparmiare un sacco di problemi, semplicemente utilizzando la funzione di 'next_permutation' incorporata in' '. –

risposta

1

La funzione è corretta ma non la si chiama correttamente.

perm(a,0,3); 

dovrebbe essere

perm(a,0,2); 

Perché?

Il tuo ciclo for:

for (j=i; j<=n; j++){ 

va fino n, così n dovrebbe essere un indice valido.

Works fine

+0

grazie mille per la tua risposta ^^))) – bionian