Backtracking

EddieG

Erfahrenes Mitglied
Hi
neue Aufgabe neues Problem ;(
Es geht um ein Labyrinth, wenn der Weg falsch war, soll man wieder einen schritt zurück.
Mein Ansatz ist dieser aber ich bekomme keine Einzige Ausgabe dafür aber eine Endlosschleife.
Code:
    public static void main(String[] args) {
//Käse Aufgabe
        int b=5,h=5;
        int[][] feld = new int[b][h];
        feld[0][1]=1;
        feld[0][3]=1;
        feld[1][1]=1;
        feld[1][3]=1;
        feld[3][1]=1;
        feld[3][2]=1;
        feld[3][3]=1;
        feld[4][2]=2;
        feld[4][3]=1;
        //Werte mit 1 == Blockade; Werte mit 2=Ziel; Leere Werte=keine Blockade
        Vector schritte = new Vector(1);
        for(int i =0; i<feld.length; i++)
        {
            for(int j = 0; j<feld.length; j++)
            {
                if(feld[i][j]!=1 && feld[i][j]!=2)
                {
                    schritte.add(feld[i][j]);
                }
                if(feld[i][j]==1)
                {
                    i-=i;
                    j-=j;
                    schritte.remove(feld[i][j]);
                    i+=i+1;
                    j+=j+1;
                }else if(feld[i][j]==2)
                {
                    int Ziel= feld[i][j];
                    System.out.println("Angekommen");
                    System.out.println("Schritte:");
                    System.out.println(i+ ": " + schritte.elementAt(feld[i][j]));
                    System.out.println(Ziel);
                }
        
            }
        }
    }
}
 
Hi,
ich habe zwar keine Ahnung, wieso das bei dir nicht klappt, welche Schleife wird dir denn zum Verhängnis?
Aber es gibt noch einen anderen Ansatz, der, wie ich finde, einfacher ist. Bei einer so einfachen Aufgabe/Labyrinth ohne Rundwege kann man Folgendes machen:
Code:
1.Schaue nach Links, wenn Frei ist, dann laufe und gehe zu Schritt 1.
2.Wenn Mauer,  schaue geradeaus. Wenn Frei, dann laufe und gehe zu Schritt 1.
3.Wenn Mauer, schaue nach rechts, Wenn Frei, dann laufe und gehe zu Schritt 1.
4.Wenn Mauer, dann gehe nach 1 Scrhritt zurück und gehe zu Schritt 1.
Wenn Rundwege hinzukommen, wird es schwerer. Ich hoffe du verstehst die Ausführungen, ich stehe ein bisschen unter Zeitdruck :).

Ciao
DosCoder

PS: Der Code ist aus Robot Karol entlehnt. Ein Programm, mit dem man sich solche Vorgänge besser klar machen kann: Link
 
Zuletzt bearbeitet:
Zurück