So hab das Problem nun endlich mit ein "wenig"Hilfe gelöst, ich poste einfach mal den fertigen Code wenn es jemanden interressiert.
Code:boolean FindeLoesung(int index, double loesung) { // index = aktuelle Schrittzahl // loesung = Referenz auf bisherige Teil-Lösung int schritt = 0; // while(es gibt es noch neue Teil-Lösungsschritte) while (schritt !=4 ) { // Wähle einen neuen Teil-Lösungsschritt schritt; schritt ++; // Weg nach 1. oben, 2. rechts, 3. unten // und 4. links zu erweitern versuchen. if(schritt==1) {}else{ if(schritt==2){ kara.turnRight();} if(schritt==3){kara.turnLeft();} if(schritt==4){kara.turnLeft(); kara.turnLeft();} } // Tests, ob schritt gültig ist boolean ok = true; // Test, ob schritt innerhalb Brett bleibt // Test, ob schritt durch Wand führt (sofern innerhalb) if (kara.treeFront()) ok = false; // Test, ob schritt auf ein bereits besuchtes Feld führt if (kara.leafFront()) ok = false; if (kara.mushroomFront()) {return true;} // if (schritt ist gültig) if (ok) {kara.move(); loesung=loesung + schritt; // Erweitere loesung um schritt // Markiere neues Feld mit aktueller Schrittzahl kara.putLeaf(); // Visualisierung // if (loesung noch nicht vollständig) if (!kara.mushroomFront()) { // rekursiver Aufruf von FindeLoesung if (FindeLoesung(index+1, loesung)) { // Lösung gefunden return true; } else { // Wir sind in einer Sackgasse: // Mache schritt rückgängig: Backtracking kara.turnLeft(); kara.turnLeft(); kara.move(); kara.turnLeft(); kara.turnLeft(); } } else return true; // Lösung gefunden -> fertig } if(schritt==3){ kara.turnRight();} if(schritt==2){kara.turnLeft();} if(schritt==4){kara.turnLeft(); kara.turnLeft();} } return false; // keine Lösung gefunden } void KaraProgram::myProgram() { /* Hier beginnt das Kara-Hauptprogramm: */ if(FindeLoesung(0,0)==true){tools.showMessage("Ausgang gefunden");} else{tools.showMessage("Gibbet keinen");} }







Zitieren

Lesezeichen