我正在迷宮求解器算法中工作,一切正常,直到它遇到死角並陷入循環,like this。問題似乎是,當它想要在那裏轉換足夠的空間時,它會轉向另一個轉彎,因爲它面對着前面的牆壁,因此陷入了無限循環。迷宮求解器被困在死循環中
下面是我正在使用的兩個代碼,但第一個代碼是最相關的代碼。
SimpleWindow
就是一切都被繪製等主窗口中,並且maze
類是生成例如wallAtLeft
,wallInFront
,atExit
迷宮和值的文件(這些都是布爾型)
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);
}
}
}
這裏是吸引一切的程序:
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);
}
}
迷宮類與描述,如果需要的話。請注意,這隻需要一些方法。 http://pastebin.com/gxSeEc2U
這是我使用的龜類:http://pastebin.com/0RqbVudn
不要使用過小走廊;-) – Aubin
有多寬是一個「走廊」? – GSP
那麼我只能使用這些預定的迷宮。總共有5個。它完成了前3個,沒有任何問題,但是在第4個和第5箇中,它陷入了死衚衕。 – Rob