Heyo, in dieser Anleitung findets du ein Programm, mit dem Karol einfache und komplexe Labyrinthe lösen kann. Um das mit den begrenzten Mitteln zu lösen, wird an ein paar Stellen tief in die Trickkiste der Informatik gegriffen :)
Die meisten Labyrinthe lassen sich mit der Rechten-Hand-Regel lösen. Dieser Algorithmus kommt hier nicht zum Einsatz, sondern eine allgemeinere Version. Diese funktioniert auch dann, wenn das Ziel nicht mit einer Wand direkt verbunden ist.
![Bild](https://assets.serlo.org/69c804f0-e54e-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Das Problem beginnt hier: Egal ob man die Linke-Hand- oder Rechte-Hand-Regel anwendet, in beiden Fällen wir Karol im Kreis um die Dreier-Reihe herumlaufen. Das Ziel ist nicht über eine Wand verbunden.
Um dieses Problem zu lösen, muss Karol zusätzlich die Felder markieren, die sie schon besucht hat. Damit kann sie erkennen, wann sie im Kreis läuft und entsprechend abbrechen.
![Bild](https://assets.serlo.org/38a77620-e54f-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Erstelle eine eigene Anweisung Suche
und SchrittZurück
. Letztere Methode spart und ein wenig Tipparbeit. Das Hauptprogramm besteht aus einem Aufruf der Methode Suche
.
![Bild](https://assets.serlo.org/f0ef5d60-e54f-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Die Hauptarbeit findet in Suche
statt. Hier ist der Code dazu.
![Bild](https://assets.serlo.org/d0284af0-e550-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Die erste Bedingung prüft, ob das Ende erreicht ist oder nicht. Später wird darauf noch genauer eingegangen.
Bei der Suche versucht Karol, einen Schritt nach vorne zu gehen. Ist eine Wand oder das Feld schon markiert, dann gehe ich wieder zurück. Es wirkt, als ob nichts passiert wäre.
Wenn es aber ein neues Feld ist, wird dieses Feld markiert. Karol dreht sich dann nach links, vorne und rechts und rufe für jede Richtung erneut Suche auf. Damit merkt sich Karol, dass sie hier alle drei Richtungen durchsuchen muss. Wenn die Suche nicht erfolgreich war, dann geht Karol wieder den Schritt zurück.
Nun kann Karol erfolgreich aus Endlos-Schleifen ausbrechen und das Ziel finden. Karol markiert dabei besuchte Felder und wiederholt die Suche nicht mehrmals.
![Bild](https://assets.serlo.org/565b26b0-e551-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Jetzt gibt es nur ein Problem: Der Ziegel ist aufgehoben, aber es liegen noch überall Marken verstreut. Diese müssen aufgeräumt werden.
![Bild](https://assets.serlo.org/8a623e30-e551-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Die Lösung? Wir laufen nochmal durch das Labyrinth und heben die Marken wieder alle. Vervollständige dazu den Code für das Ende und lege eine neue Methode Aufräumen
an.
![Bild](https://assets.serlo.org/d1019e80-e551-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Das Aufräumen funktioniert genauso wie die Suche über eine Rekursion.
![Bild](https://assets.serlo.org/f4e516b0-e551-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Damit kommt Karol wieder am Ziel an und hat alle Marken gelöscht.
![Bild](https://assets.serlo.org/13df62f0-e552-11ee-b7d4-c3a8c723f2a0/labyrinth.png)
Zum Schluss nochmal der gesamte Code im Überblick.
![Bild](https://assets.serlo.org/442ec9a0-e552-11ee-b7d4-c3a8c723f2a0/labyrinth.png)