Maze solver gets stuck in a loop at a dead-end

爷,独闯天下 提交于 2019-12-11 10:57:19

问题


I'm working in a Maze solver algorithm and everything is working fine until it hits a dead-end and gets stuck in a loop, like this. The problem seems to be that when it want to turn around there aint enough space for it so instead it makes another turn since it faces a wall in front and thus gets stuck in an endless loop.

Here are the two codes I'm working with but the first one is the most relevant one.

SimpleWindow is the main window where everything gets drawn etc, and the maze class is the file which generates the mazes and values for example wallAtLeft, wallInFront, atExit (these are all boolean)

import se.lth.cs.ptdc.window.SimpleWindow;
import se.lth.cs.ptdc.maze.*;

public class MazeTurtle extends Turtle {
protected int Maze;

public MazeTurtle(SimpleWindow w, int x, int y) {
    super(w, x, y);
}

public void walk(Maze maze) {
    Maze m = new Maze(4);
    Turtle t = new Turtle(w, m.getXEntry(), m.getYEntry());
    int x1 = m.getXEntry();
    int y1 = m.getYEntry();
    int dir = t.getDirection();
    t.penDown();

    while ((m.atExit(x1, y1)) == false) {
        if (m.wallAtLeft(dir, x1, y1) == true) {
            t.forward(1);
            SimpleWindow.delay(10);
        }

        else if (m.wallAtLeft(dir, x1, y1) == false) {
            t.left(90);
            t.forward(1);
            SimpleWindow.delay(10);
        }

        if (m.wallInFront(dir, x1, y1) == true) {
            t.left(-90);
            t.forward(1);
            SimpleWindow.delay(10);
        }

        x1 = t.getX();
        y1 = t.getY();
        dir = t.getDirection();
        System.out.println("X: " + x1 + "Y: " + y1);
    }

}

}

Here is the program that draws everything:

import se.lth.cs.ptdc.window.SimpleWindow;
import se.lth.cs.ptdc.maze.*;

public class MazeTest {

public static void main(String args[]) {

    Maze m = new Maze(4);
    SimpleWindow w = new SimpleWindow(600, 600, "MazeTest");
    MazeTurtle t = new MazeTurtle(w, m.getXEntry(), m.getYEntry());
    t.penDown();
    m.draw(w);
    t.walk(m);
}

}

The maze class with descriptions if it is needed. Note that only some of the methods are needed for this. http://pastebin.com/gxSeEc2U

This is the turtle class I'm using: http://pastebin.com/0RqbVudn


回答1:


I think you should not be calling t.forward(1); in section below, as there may be a wall again after changing the direction.

    if (m.wallInFront(dir, x1, y1) == true) {
        t.left(-90);
        //t.forward(1);
        SimpleWindow.delay(10);
    }

I am just assuming forward(1) tries to move one step and may be resulting into issue if there is no space(wall in front)




回答2:


Instead of using

if (m.wallInFront(dir, x1, y1) == true) {
        t.left(-90);
        SimpleWindow.delay(10);

I replaced it with this:

if (m.wallInFront(dir, x1, y1) && m.wallAtLeft(dir, x1, y1) == true) {
            t.left(-90);
            SimpleWindow.delay(10);
        }

Now instead of checking one thing at a time it checks if there is a CORNER not only a wall.

Thank you all for the help on the way :)



来源:https://stackoverflow.com/questions/13294848/maze-solver-gets-stuck-in-a-loop-at-a-dead-end

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!