brahma
Netzpirat
Moin.
Ich muss ein Programm schreiben, das rekursiv die Schritte für das Spiel Towers of Hanoi berechnet. Das war soweit kein Problem, allerdings soll auch immer ausgegeben werden, wo sich weche scheibe befindet, in der Form, das jeder Stab ein Array symbolisiert.
Das Startarray initialisiere ich mit folgender Funktion:
Je nachdem wieviele SCheiben vorkommen sollen (n) wird src eben gefüllt.
SchuffleTower ist dann mein Algorythmus, der die Schritte brechnet.
Er funktioniert auch, verschiebt mir aber leider immer den ganzen Tower auf den Scheiben, und nicht nur ein Element. WIe kann ich das ändern, das ähnlich wie in vielen Anwendungen im Web die Scheiben einzeln ausgegeben werden?
Zur Ausgabe habe ich Momentan folgende Funktion:
Diese gibt mir dann jeweils das Bild aus
A: 4321
B:
C:
für den Start. Jetzt müsste nach Schritt 1 kommen:
A: 432
B:
C: 1
Normalerweise würde ich fummeln bis das klappt, aber ich hab da etwas Zeitdruck
Ich muss ein Programm schreiben, das rekursiv die Schritte für das Spiel Towers of Hanoi berechnet. Das war soweit kein Problem, allerdings soll auch immer ausgegeben werden, wo sich weche scheibe befindet, in der Form, das jeder Stab ein Array symbolisiert.
Das Startarray initialisiere ich mit folgender Funktion:
Code:
void initTower(int n, int *src, int *tmp, int *dst){
int i=0;
while(i<n){
src[n-i-1]=n-i;
i++;
}
schuffleTower(n, src, tmp, dst);
}
Je nachdem wieviele SCheiben vorkommen sollen (n) wird src eben gefüllt.
SchuffleTower ist dann mein Algorythmus, der die Schritte brechnet.
Code:
void schuffleTower(int n, int *src, int *tmp, int *dst){
if(n > 0){
schuffleTower(n-1, src, dst, tmp);
showTowers(src, tmp, dst);
schuffleTower(n-1, tmp, src, dst);
}
}
Er funktioniert auch, verschiebt mir aber leider immer den ganzen Tower auf den Scheiben, und nicht nur ein Element. WIe kann ich das ändern, das ähnlich wie in vielen Anwendungen im Web die Scheiben einzeln ausgegeben werden?
Zur Ausgabe habe ich Momentan folgende Funktion:
Code:
void showTowers(int *src, int *tmp, int *dst){
int i=0;
printf("A:");
while(src[i] > 0){
printf("%i ", src[i]);
i++;
}
i=0;
printf("\nB:");
while(tmp[i] > 0) {
printf("%i ", tmp[i]);
i++;
}
i=0;
printf("\nC:");
while(dst[i] > 0){
printf("%i ", dst[i]);
i++;
}
printf("\n\n");
}
Diese gibt mir dann jeweils das Bild aus
A: 4321
B:
C:
für den Start. Jetzt müsste nach Schritt 1 kommen:
A: 432
B:
C: 1
Normalerweise würde ich fummeln bis das klappt, aber ich hab da etwas Zeitdruck