000
24.05.2004, 20:43 Uhr
~mansonfreak
Gast
|
hi ...
also ich folgenden code ... wichtig ist eigentlich nur die methode mauszug ...
das programm spricht ja für sich wenn mans einmal laufen lässt ... nun will ich aber folgendes ...
wenn die maus den käse findet, soll die methode verlassen werden ... es wird aber aufgrund der rekursiven aufrufe immer noch weitergesucht ... ich habs mit bool variablen versucht ... haut aber nicht hin ... wie gehört der code abgeändert, damit er die methode verlässt ...
vielen Dank
C++: |
/************************************************************** Labyrinth: Eine Maus starten in Zelle 0/0 und soll den Kaese in Zelle 4/4 finden. Beispiel fuer einen Backtracking-Algorithmus **************************************************************/
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring>
using std::cout; using std::cin; using std::cerr; using std::endl;
#define n 5 // Labyrinthgröße char feld[n][n]={ {' ',' ',' ','X',' '}, {' ',' ',' ',' ',' '}, {' ','X',' ','X',' '}, {' ','X',' ','X',' '}, {' ',' ','X','X','@'}}; // ' ' = Weg, 'X' = Mauer, '@' = Käse char allesausgeben;
void ausgabe(char *text) { int i,j; printf("\n+"); for (i=0; i<n;i++) printf("-"); printf("+"); for (i=0; i<n;i++) { printf("\n|"); for (j=0; j<n; j++) printf("%c", feld[i][j]); printf("|"); } printf("\n+"); for (i=0; i<n;i++) printf("-"); printf("+"); printf("%s\n", text); getc(stdin); // evtl. auskommentieren! } void mauszug(int zeile, int spalte) {
bool test = true;
if (zeile >= 0 && spalte >= 0 && zeile < n && spalte < n && feld[zeile][spalte] != 'X' && feld[zeile][spalte]!=':') { // Zug trifft Labyrinth und Feld ist noch frei
if (feld[zeile][spalte] == '@') { // Käse gefunden!!!!! feld[zeile][spalte] = '#'; // Käse fressen feld[zeile][spalte] = '#'; // Käse fressen ausgabe("Hmmm, leckerer Käse!"); test = false; cout << "Test1" << endl;
} // if else {feld[zeile][spalte]=':'; // Feld als besetzt markieren
if (allesausgeben) ausgabe("");
if (test == true) mauszug(zeile+1, spalte); // rekursive Aufrufe if (test == true) mauszug(zeile, spalte+1); if (test == true) mauszug(zeile-1, spalte); if (test == true) mauszug(zeile, spalte-1);
if (allesausgeben) ausgabe(""); feld[zeile][spalte]=' '; // Feld freigeben!!! } // else } // if } // mauszug
int main() { char antwort[10]; printf("Wollen Sie jeden mauszug ausgeben? "); scanf("%s",antwort); allesausgeben = antwort[0]=='J' || antwort[0]=='j'; ausgabe(""); mauszug(0, 0);
cout << "Wieder zurück" << endl;
return 0; }
|
|