我想弄清楚这个算法是A *(A-Star)算法还是别的,但我仍然感到困惑。什么样的迷宫解决算法是这样的?
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;
}
}
您的代码不完整;请参阅http://stackoverflow.com/help/mcve。另外,添加相关的语言标签(我知道它是Java,但我不应该猜测)。 – Jubobs
你能提供标记的定义吗?这看起来像是一个简单的深度优先搜索,但具有全局访问标记。 –
@LucasMoeskops:不,它标志着已经去过的地方。所以它最多可以运行在O(n^2)的n个单元格中。 –