You thought that your algorithm was enough to escape mazes? Well, not every mazes...
The wall follower algorithm we used so far only works if the entry and the exit are placed near to walls connected to the external wall. But if the buggle begins in the middle of the maze, it may exist wall sections disconnected from the external wall.
That is why the previous strategy would let the buggle round around for ever. Indeed, the maze you should now escape from contains islands, and the buggle does not start along one of the external walls. Just give it a try if you want: copy your code over, push the run button and see your previous solution failing miserabily.
The method of following a wall is still good and allow to escape very efficiently some sections of the maze, so we do not want to remove it entierely. Instead, we want to stop following the wall under some conditions. Notice that the baggle lays near to the external border of the maze. So, we want to reach the border and then follow that wall. We need for example to search for the north wall before following it to the baggle.
To find the north wall, you simply run to the north as long as it's possible, and when facing an obstacle, you avoid it (using previous method).
[!scala]var state=0; state match { case 0 => // North runner ... state = 1; case 1 => // Left follower ... state = 0; case _ => println("This case should not happen. Please fix me") }[/!][!java|c]int state=0; switch (state) { case 0: // North runner ... state = 1; break; case 1: // Left follower ... state = 0; break; }[/!][!python]northRunner = True if northRunner: ... northRunner = False else: # left follower ... northRunner = True[/!][!scala]
Don't forget to let the buggle pick the baggle at the end of your code.
You're up. That should be enough for you to figure out how to escape this maze, but if not, you can always request for the tip. But you do not need any more help, do you?