Permutationen
Hier eine kleines Beispiel für einen Algorithmus der alle Permutationen einer Zeichenkette errechnet.
Zum einfacheren Verständnis der Aufrufbaum für das Beispiel "abc":

Es wird also bei jedem Aufruf, das als Position angegebene Zeichen nacheinander mit allen Zeichen davor (einschließlich sich selbst) getauscht und die Funktion 'permutation' erneut aufgerufen.
Und nun der C-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /* * Autor: Sven Walter * Datum: 01.08.2011 */ #include <stdio.h> #include <stdlib.h> void tausche(char *c, int i, int j); void permutation(char *c, int pos); int main(int argc, char** argv) { char c[20]; // Eingabe der Zeichen printf("Zeichen: "); scanf("%s",&c); fflush(stdin); // Starte Permutation permutation(c, strlen(c)-1); return (EXIT_SUCCESS); } // Tauscht das Zeichen an Stelle i mit dem Zeichen an Stelle j void tausche(char *c, int i, int j) { char tmp = c[i]; c[i] = c[j]; c[j] = tmp; } // Gibt alle Permutationen von c aus. // 'pos' gibt an, bis zu welcher Stelle die Permutation durchgeführt werden soll void permutation(char *c, int pos) { int i; // Wenn die Permutation bereits an allen Zeichen durchgeführt worden ist if(pos==0) { printf("%s\n",c); } else { // Schleife für alle Zeichen vor 'pos' for(i=0; i<=pos; i++) { tausche(c, pos, i); // schiebe das Zeichen hinter permutation(c, pos-1); // führe Permutation für die Zeichen davor aus tausche(c, pos, i); // tausche wieder zurück (für die nächste Runde) } } } |
Kommentare
» Keine Kommentare vorhanden.