Hallo,
Seit Tagen bin ich jetzt am überlegen und bin gestern auf eine relativ schnelle Lösung gekommen - doch leider ist am Ende ein Schritt nicht in dem Lösungsweg registriert.
Es geht um eine Matrix mit einer beliebigen Zahl an Zeichenpärchen. Um herauszufinden ob die Matrix auf die erlaubte Art zu leeren ist, habe ich mir überlegt zu schauen, welche Züge aktuell möglich sind, den ersten zu nehmen, diesen durchzuführen und auf der Nächsten ebene zu schauen welche möglich sind- ist die Matrix leer bin ich fertig, wenn nicht und es gibt keine Möglichen Züge gehe ich einen Schritt zurück und nehme dort den zweiten Weg....
Am Schluss sagt er mir, dass es eine Möglichkeit gibt - wann ich nun an einem Punkt angekommen bin und es nicht geht, weiß ich noch nicht.
Das was das größte Problem darstellt ist, dass in meiner Liste für den Lösungsweg ein Zug fehlt - und damit ist die ganze Liste kaputt.
Die Methode die das alles berechnen sollte sieht so aus:
Wäre toll, wenn jemand helfen könnte.
Gruß
Kirchrath
PS: Das ist ein teil eines Projektes und ich kann leider nicht alles veröffentlichen - ich möchte auch keine komplettcodes sondern würde mich darüber freuen, wenn mir jemand erklären könnte, wieso er den Fehler macht....
Seit Tagen bin ich jetzt am überlegen und bin gestern auf eine relativ schnelle Lösung gekommen - doch leider ist am Ende ein Schritt nicht in dem Lösungsweg registriert.
Es geht um eine Matrix mit einer beliebigen Zahl an Zeichenpärchen. Um herauszufinden ob die Matrix auf die erlaubte Art zu leeren ist, habe ich mir überlegt zu schauen, welche Züge aktuell möglich sind, den ersten zu nehmen, diesen durchzuführen und auf der Nächsten ebene zu schauen welche möglich sind- ist die Matrix leer bin ich fertig, wenn nicht und es gibt keine Möglichen Züge gehe ich einen Schritt zurück und nehme dort den zweiten Weg....
Am Schluss sagt er mir, dass es eine Möglichkeit gibt - wann ich nun an einem Punkt angekommen bin und es nicht geht, weiß ich noch nicht.
Das was das größte Problem darstellt ist, dass in meiner Liste für den Lösungsweg ein Zug fehlt - und damit ist die ganze Liste kaputt.
Die Methode die das alles berechnen sollte sieht so aus:
- LevelParser ist ein Object das die Matrix beinhaltet.
- lpHistory speichert die LevelParser objekte ab die entstanden sind - wird ein schritt zurückgegangen wird entsprechend dort gelöscht (hier ist der Hund begraben - manchmal wird zu viel gelöscht, der nächste schritt der Berechnung fängt aber dort an, wo er sein sollte)
- setSol berechnet aus dem unterschied der Matrizen die Schritte die gegangen wurden
Java:
private void solverLogic() throws ParameterOutOfRangeException, SyntacticIncException{
boolean couldBeSolved = true;
LevelParser lpObject = this.lpObject.clone();
LinkedList<int[][]> apm;
int positionToUse = 0;
while(!solvable || couldBeSolved)
{
apm = getActualPossibleMoves(lpObject.clone());
if(apm.size()>0){
if(positionToUse>apm.size())
{
couldBeSolved = false;
break;
}
LevelParser genL = easyMove(lpObject,apm.get(positionToUse));
this.lpHistory.add(genL.clone());
if(Move.isSolved(genL))
{
this.solvable = true;
break;
}else
{
lpObject = genL.clone();
}
if(positionToUse>0) {
positionToUse--;
}
}else{
this.lpHistory.removeLast();
LevelParser lpTMPObject = this.lpHistory.removeLast();
lpObject = lpTMPObject.clone();
positionToUse++;
}
}
setSol(this.lpObject.clone(),this.lpHistory);
}
Wäre toll, wenn jemand helfen könnte.
Gruß
Kirchrath
PS: Das ist ein teil eines Projektes und ich kann leider nicht alles veröffentlichen - ich möchte auch keine komplettcodes sondern würde mich darüber freuen, wenn mir jemand erklären könnte, wieso er den Fehler macht....