Labyrinth - Weg mit x füllen aber x verschwindet
-
uhm also wenn mach ich das unbewussst? wo soll das denn passieren?
-
m[r][c] = ' ';
ist die letzte Anweisung vor dem return. Damit ersetzt Du sie durch ein leerzeichen.
-
okay... danke

Hm... könntest du mir vielleicht noch bei der Errechnung der Ausgänge helfen?

Ich wollte es so lösen, dass halt beim auftreten auf einen Punkt sum hochgezählt wird.
Leider scheint das absolut nicht so zu funktionieren, wie ich es möchte

void mazeTraverse( char m[][14], int r, int c ) { static int update = time( 0 ) % 10; int sum=0; while ( time(0) % 10 != update ) ; // wait if ( time( 0 ) % 10 == 9 ) update = 0; else update = (time( 0 ) % 10) + 1; m[r][c] = 'x'; // mark spot visited system("cls"); // print the maze for ( int row = 0; row < 14; row++ ) { for ( int column = 0; column < 14; column++ ) cout << m[row][column]; cout << '\n'; } if ( m[r][c] == 'E' ) { cout << "\nsuccess!\n"; return; } else { if ( m[r-1][c] == ' ' || m[r-1][c] == 'E' ) // if can go up mazeTraverse( m, r-1, c ); // start going up if ( m[r+1][c] == ' ' || m[r+1][c] == 'E' ) // if can go down mazeTraverse( m, r+1, c ); // start going down if ( m[r][c-1] == ' ' || m[r][c-1] == 'E' ) // if can go left mazeTraverse( m, r, c-1 ); // start going left if ( m[r][c+1] == ' ' || m[r][c+1] == 'E' ) // if can go right mazeTraverse( m, r, c+1 ); // start going right if ( m[r][c+1] == '.') sum++; cout << "Es gibt " << sum << "Ausgaenge"; return; }
-
Das funktioniert so nicht, weil Du sum ja erst in der Funktion anlegst, jeder rekursive Aufruf hat seine eigene Variable. Du kannst die Variable entweder global anlegen, oder per Referenz mit an die Funktion übergeben.
-
Ah .. -.- ^^
Hm.. seltsamerweise zählt er mir nun aber nur einen "Ausgang", obwohl das x zu beiden hinläuft.
#include <iostream> #include <ctime> using std::cout; int sum=0; void mazeTraverse( char [][14], int, int ); int main() { char maze[14][14] = { { '.','.','.','.','.','.','.','.','.','.','.','.','.','.' }, { '.','#','#','#','#','#','#','#','#','#','#','#','#','.' }, { '.','#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ','#','.' }, { '.',' ',' ','#',' ','#',' ','#','#','#','#',' ','#','.' }, { '.','#','#','#',' ','#',' ',' ',' ',' ','#',' ','#','.' }, { '.','#',' ',' ',' ',' ','#','#','#',' ','#',' ',' ','.' }, { '.','#','#','#','#',' ','#',' ','#',' ','#',' ','#','.' }, { '.','#',' ',' ','#',' ','#',' ','#',' ','#',' ','#','.' }, { '.','#','#',' ','#',' ','#',' ','#',' ','#',' ','#','.' }, { '.','#',' ',' ',' ',' ',' ',' ',' ',' ','#',' ','#','.' }, { '.','#','#','#','#','#','#',' ','#','#','#',' ','#','.' }, { '.','#',' ',' ',' ',' ',' ',' ','#',' ',' ',' ','#','.' }, { '.','#','#','#','#','#','#','#','#',' ','#','#','#','.' }, { '.','.','.','.','.','.','.','.','.','.','.','.','.','.' } }; mazeTraverse( maze, 3, 1 ); cout << "Es gibt " << sum << "Ausgaenge"; system("pause"); return 0; } // end main void mazeTraverse( char m[][14], int r, int c ) { static int update = time( 0 ) % 10; while ( time(0) % 10 != update ) ; // wait if ( time( 0 ) % 10 == 9 ) update = 0; else update = (time( 0 ) % 10) + 1; m[r][c] = 'x'; // mark spot visited system("cls"); // print the maze for ( int row = 0; row < 14; row++ ) { for ( int column = 0; column < 14; column++ ) cout << m[row][column]; cout << '\n'; } if ( m[r][c] == 'E' ) { cout << "\nsuccess!\n"; return; } else { if ( m[r-1][c] == ' ' || m[r-1][c] == 'E' ) // if can go up mazeTraverse( m, r-1, c ); // start going up if ( m[r+1][c] == ' ' || m[r+1][c] == 'E' ) // if can go down mazeTraverse( m, r+1, c ); // start going down if ( m[r][c-1] == ' ' || m[r][c-1] == 'E' ) // if can go left mazeTraverse( m, r, c-1 ); // start going left if ( m[r][c+1] == ' ' || m[r][c+1] == 'E' ) // if can go right mazeTraverse( m, r, c+1 ); // start going right if ( m[r][c+1] == '.') sum++; return; } } // end function mazeTraverseDie ausgabe sagt es gibt einen Ausgang, es müssten aber zwei sein, weil das x an zwei stellen auf einen Punkt treffen kann (und eigentlich auch müsste zumindestens werden alle wege "vom x beschritten")
-
Die Abfrage vor dem sum++ sieht komisch aus. Du fragst damit ja das Feld nebendran ab oder so. Eventuell solltest Du das überarbeiten?
-
Hm.. wenn ich sie mit den anderen "glichsetze" /halt weiterhin ein . anstatt ein Leerzeichen) kommt weiterhin das gleiche raus und mir gehen die Ideen aus.
Die abfrage muss doch sein, wenn er auf nen Puntk trifft dann zähle Summe hoch und er müsste zweimal auf einen Puntk treffen -.- Ich verstehs nicht

-
hmm du prüfst aber auch nur ob sich rechts ein Punkt befindet.
Solltest du die drei anderen Richtungen nicht auch prüfen?
-
Okay... gibt es noch eine Möglichkeit, den eingang nicht mitzählen zu löassen, ausser keine Überprüfung Links durchzuführen? wahrscheinlich nicht, oder?
-
Was wäre wenn Du Eingänge und Ausgänge mit verschiedenen Symbolen kennzeichnest?
-
Würde ich ja gerne, aber die aufgabenstellung lautet numal genau so

P.S. Wie könnte ich denn den Ausgängen ihre "laufende Nummer" zuordnen und ausgeben? So etwas hab ich noch nie gemacht und auch nicht in "C++ lernen und professionell anwenden" von Prinz gefunden? o.O