Labyrinth

gfp4ever

Mitglied
Hallo zusammen,
ich müsste den Weg aus einen Labyrinth rausfinden und markieren. Klar, Rekursion ist das Thema. Nach viel hin und her habe ich mich für ein Switch-Case entschieden (das hat sich so ergeben...) mit dem Cases oben, unten, rechts, links.
Mein Problem ist das wenn ich das Labyrinth da durchlaufen lasse, bekomme ich den Fehler "index out of bounds", was ich nicht wirklich nachvollziehen kann weil der Index worum es geht liegt mittig im Labyrinth. Hätte da jemand zeit und Lust mir zu helfen?
Danke in voraus.
 

fhoffmann

Top Contributor
Möglicherweise gehst du in deinem Labyrinth immer im Kreis. Du merkst dir also nicht, ob du an der Stelle, an der du bist, früher schon einmal warst.
Aber ohne deinen Code zu sehen, kann ich hier nur raten.
 

gfp4ever

Mitglied
Der code sieht so aus...
Die Idee war beginnen nach oben und dann in Uhrzeigersinn prüfen ob der Weg frei ist, wenn ja, weiter machen, wen nicht, dann in Uhrzeigersinn weiter prüfen. Aber vielleicht bin ich wirklich in kreis gelaufen...

Java:
    public static boolean labSolveSwitch(char[][] lab, int x, int y, int n) {
        boolean ok = false;
        for (int i = 0; i < 4 && !ok; i++)
            if (i !=n) {
                switch (i) {
                case 0:
                    if (lab[y-1][x] == ' ')
                        ok = labSolveSwitch (lab, x, y-2, 2);
                    break;
                case 1:
                    if (lab[y][x+1] == ' ')
                        ok = labSolveSwitch (lab, x + 2, y, 3);
                    break;
                case 2:
                    if (lab[y+1][x] == ' ')
                        ok = labSolveSwitch (lab, x, y + 2, 0);
                    break;
                case 3:
                    if (lab[y][x-1] == ' ')
                        ok = labSolveSwitch (lab, x - 2, y, 1);
                    break;
                }       
                if (x == 0 && y == 0 && x >= lab.length && y >= lab.length) {
                    ok = true;
                    }           
                if (ok) {
                    lab[x][y] = '*';
                    switch (n) {
                    case 0:
                        lab[y-1][x] = '*';
                        break;
                    case 1:
                        lab[y][x+1] = '*';
                        break;
                    case 2:
                        lab[y+1][x] = '*';
                        break;
                    case 3:
                        lab[y][x-1] = '*';
                        break;
                        }
                    }
                }
        return ok;
    }
 

Jw456

Top Contributor
Du merkst dir den Weg ja erst wenn du aus der Rekursion zurückkommst .
Und das auch nur wenn das erfüllt ist.
if (x == 0 && y == 0 && x >= lab.length && y >= lab.length) {
ok = true;
}
Das if wird nie true sein.



Gehst ja bei jeden erneuten Aufruf erst mal nach oben.

Welches Zeichen stellt eine Wand dar in deinem Labyrinth dar?
" " ist ein leerraum
"*" ist dein gegangener Weg
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Auch das macht keinen Sinn.
Java:
case 0: if (lab[y-1][x] == ' ') ok = labSolveSwitch (lab, x, y-2, 2); break;
Du prüft zb bei nach oben ob über dir frei ist. Aber gehst dann zwei Schritte nach oben. Wo du garnicht geprüft hast. Dort könnte ja schon eine Mauer sein.
Das ist bei den anderen Richtungen das gleiche.
 

gfp4ever

Mitglied
Hallo zusammen, vielen Dank für die feedbacks... ich habe am Ende doch alles neu gemacht. Mit dem Switch-Case waren zu viele verschachtelte ifs und cases das ich da den überblick verloren habe und sinnlose codes geschrieben habe (Danke Jw456 !).
 

Neue Themen


Oben