使用堆栈来解决迷宫面向对象(回溯)问题

时间:2014-06-15 17:13:44

标签: java stack maze

我试图以面向对象的方式解决迷宫。

我的迷宫由字段组成,每个字段都有一个元素属性, 元素是墙,玩家,帮助者或端点。具有空属性的字段是路径。

每个字段都在HashMap中跟踪自己的邻居。

当玩家击中帮手时,助手应解决迷宫并显示正确的路径。

我试图通过获取帮助程序的当前位置并将其存储在堆栈中的邻居字段来查找端点。

就助手来说,这是代码。 循环永远不会结束,我不知道为什么?

public void findRoute() {

    Collection<Field> c = currentField.getHashMap().values();
    Stack<Field> fieldNeighbours = new Stack<Field>();
    for (Field field : c) {

        fieldNeighbours.push(field);

    }

    while (!endpointReached) {

        Field p = fieldNeighbours.pop();

        if (p.getElement().getNaam().equals("endPoint")) {

            System.out.println("endPoint Reached! ");
            endpointReached = true;
            return;

        }

        if (!p.getElement().getNaam().equals("Wall")) {

            if (!p.getHashMap().get("north").getElement().getNaam().equals("Wall")) {

                fieldNeighbours.push(p.getHashMap().get("north"));


            }
            if (!p.getHashMap().get("south").getElement().getNaam().equals("Wall")) {

                fieldNeighbours.push(p.getHashMap().get("south"));

            }
            if (!p.getHashMap().get("east").getElement().getNaam().equals("Wall")) {

                fieldNeighbours.push(p.getHashMap().get("east"));

            }
            if (!p.getHashMap().get("west").getElement().getNaam().equals("wall")) {

                fieldNeighbours.push(p.getHashMap().get("west"));


            }

        }

    }

1 个答案:

答案 0 :(得分:0)

除了堆栈之外,您还需要一组已访问过的单元格,以避免重复搜索循环。

我还要指出,对于大多数用途而言,使用散列而不是简单的引用是不好的设计。