2012-10-01 5 views
5

Mögliche Duplizieren:
generate strings with all permutation of characterrekursive Permutation Generator für Zeichen

Ich bin Anfänger in C++, und ich brauche wirklich deine Hilfe. Ich mache ein Programm für die Permutation mit Rekursion. Hier ist mein Code, aber die Ausgabe ist seltsam, es gibt gleiche Zahlen, die viele Male und Leerzeichen wiederholen. Ich konnte nicht herausfinden, was das Problem ist, oder vielleicht muss ich etwas hinzufügen. Bitte hilf mir. Hier ist mein Code:

#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

Sie können sich durch eine Menge Ärger sparen einfach mit der 'next_permutation' Funktion eingebaut in' '. –

Antwort

1

Die Funktion ist korrekt, aber Sie rufen es nicht richtig an.

perm(a,0,3); 

sollte

perm(a,0,2); 

Warum?

Ihre for-Schleife:

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

geht bis n, so sollte n ein gültiger Index sein.

Works fine

+0

vielen Dank für Ihre Antwort ^^))) – bionian