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");}
}
Lesezeichen