你能提供一些伪代码来显示迷宫的路径吗?

时间:2012-04-24 03:48:37

标签: java

我正在尝试编写一个algoritim来查找和显示迷宫中的路径。

从输入文件中读取迷宫轮廓并存储在2D阵列中。

我需要在点(1,1)处开始迷宫并找到通过迷宫的任何路径。

我有一个findpath()方法,我能够找到退出的东西,但是在找到退出后我需要显示我通过弹出堆栈到达那里的路径(我目前无法做,是我需要帮助的)。找到目标后,堆栈应弹出完成,并且仅包含用于查找目标的路径。 (此时我只会更改这些房间内的值,但我知道该怎么做)

请查看我的推送发生的位置,并提供一些指导,说明应该推送和弹出的订单,以满足上述条件。

非常感谢任何帮助。谢谢。

这是当前的输出:o最初是一个空白区域但是当被检测为目标时它被更改

********************
*     *            *
** ** ***** ** *****
*  *  *      * *   *
*  *    *    * * * *
*       *        * *
*************  **  *
*                  O
********************

代码:

 public void findPath() {  
    Room start = rooms[1][1];
    push(start);
    while(!isEmpty()) { 
        current = pop();
        System.out.println("The value stored in current is" + current.getValue()+ "");
        if (current == null) 
            System.out.println("current is null");
        //This is finding the goal the walls will contain a * 
        else if(current.getValue() == ' ' && current.getRight() == null || current.getValue() == ' ' && current.getLeft() == null || current.getValue() == ' ' && current.getUp() == null || current.getValue() == ' ' && current.getRight() == null){
            current.setValue('O');
            for(int i = 0; i < tos; i++ ){
                pop();
            }

        System.out.println(" I found the end here is the path:" + current.getPrevious().getValue()+ " jjj");
        } else if(current.getBlocked() == false && current.getVisited() == false) {
            System.out.println("pushing currents neighbors left, right....etc" +  "current is at" + current.getCord());
            current.setVisited(true);
            if(current.getRight() != null){
                current.getRight().setPrevious(current);
                push(current.getRight());
                System.out.println("Inside push 1" +current.getRight().getCord());
            } else {
                System.out.println("Inside push right is null");
            }
            if(current.getLeft() != null) {
                current.getLeft().setPrevious(current);
                push(current.getLeft());
                System.out.println("Inside push 2 " + current.getLeft().getCord());
            } else {
                System.out.println("Inside push left is null");
            }
            if(current.getUp() != null)  {
                current.getUp().setPrevious(current);
                push(current.getUp());
                System.out.println("Inside push 3" + current.getUp().getCord());
            } else {
                System.out.println("Inside push up is null");
            }
            if(current.getDown() != null) {
                current.getDown().setPrevious(current);
                push(current.getDown());
                System.out.println("inside push 4" + current.getDown().getCord());
            }
        } else {
            System.out.println("Inside push down is null");
        }
    }
    for(int i = 0; i < rows ; i++) {
        for(int j = 0; j < columns ; j++) {
            System.out.print(rooms[i][j].getValue());
        }   
    System.out.println();
    }
}

1 个答案:

答案 0 :(得分:0)

不是伪代码,而是一个话题:

考虑一下你如何穿越迷宫。如果您在使用最佳路径时始终保留“面包屑”,那么您将标记出最佳路径。