Ich versuche, wenn dieser Algorithmus A * ist, um herauszufinden, (A-Star) Algorithmus oder was auch immer, aber ich bin immer noch verwirrt.Welche Art von Labyrinth Solving-Algorithmus ist das?
Stack<Cell> stack = new Stack<>();
stack.push(maze.start());
stack.peek().mark(SOLUTION_MARK);
while (!stack.peek().hasMark(Cell.END)) {
Cell current = stack.peek();
ArrayList<Cell> dirs = current.neighbors();
boolean found = false;
for (Cell next : dirs) {
if (next.hasMark(ERROR_MARK) || next.hasMark(SOLUTION_MARK)) {
continue;
}
stack.push(next);
next.mark(SOLUTION_MARK);
found = true;
break;
}
if (!found) {
stack.pop().mark(ERROR_MARK);
}
for (MazeBody listener : listeners) {
listener.repaint();
}
}
Mark.java
public final class Mark {
private static Map<String, Mark> TABLE = new HashMap<>();
private String name;
private Mark(String markName) {
name = markName;
}
public static Mark get(String name) {
Mark mark = TABLE.get(name);
if (mark == null) {
mark = new Mark(name);
TABLE.put(name, mark);
}
return mark;
}
}
ist Ihr Code nicht vollständig; siehe http://stackoverflow.com/help/mcve. Fügen Sie auch das relevante Sprachtag hinzu (ich weiß, dass es Java ist, aber ich sollte nicht raten müssen). – Jubobs
Können Sie die Definition für Marke angeben? Das sieht für mich wie eine einfache Tiefensuche aus, aber mit globaler Markierung von besucht. –
@LucasMoeskops: Nein, es markiert die bereits besuchten Orte. Also wird es höchstens mit n Anzahl der Zellen in O (n^2) laufen. –