我将使用堆栈的链接列表实现以某种方式生成迷宫的解决方案。迷宫是从.txt文件中读取的,由开放空间的0组成,墙壁为1。 enter image description here< - 可以肯定的是,退出必须位于底行?那三个0?

我试图使用的算法是:

While Not At End
    If Can Go North
        Go North
    ElseIf Can Go East
        Go East
    ElseIf Can Go South
        Go South
    ElseIf Can Go West 
        Go West
    EndIf
Wend

我一直在尝试它依靠++操作在数组索引中执行的方式。我不知道阵列下标操作员[优先考虑++,所以现在我需要重新考虑工作。在这样做之前,我想确保此方法甚至首先工作。到目前为止,谁能看我的算法代码并提供一些供稿? (注意:我仍然需要添加一些代码来跟踪所需的路径以避免某种类型的无限循环)

bool notSolved = true;
        int path = 0;
        row = 0;
        col = 0;

        rowStack.push(row);
        colStack.push(col);

        while (notSolved){

        //(from perspective of person looking at maze on screen)
        if (maze[row--][col] == 0){//if you can go up, go up
        rowStack.push(row);
        colStack.push(col);
        path++;
        }
        else if (maze[row][col++] == 0){//else if you can go right, go right
        rowStack.push(row);
        colStack.push(col);
        path++;
        }
        else if (maze[row++][col] == 0){//else if you can go down, go down
        rowStack.push(row);
        colStack.push(col);
        path++;
        }
        else if (maze[row][col--] == 0){//else if you can go left, go left
        rowStack.push(row);
        colStack.push(col);
        path++;
        }

            if((maze[row][col] == 0) && (row == (size - 1))){//if we reached an exit
                cout << "Solution Path:" << endl;
                for (int i = 0; i < path; i++){
                    cout << "row:" << rowStack.top() << " col:" << colStack.top() << endl;
                    rowStack.pop();
                    colStack.pop();
                }
            notSolved = false;
            }
        }

执行[++之前的执行问题:enter image description here

任何帮助,感谢!

有帮助吗?

解决方案

您的算法将无法在具有圆形路径的某些迷宫中起作用:一旦进入其中之一,您就会绕圈。要解决此问题,您需要添加访问[R] [C] [DIR]的布尔数组,其中DIR是一个从零到三个代表方向的数字。当您将单元[r] [c]留在[d]方向[d]时,将访问[r] [c] [d]设置为true。下次您访问同一单元格时,看看您之前是否将其留在了相同的方向上;如果您这样做了,请跳过该方向,然后在下线下沿着下一个方向前进。

其他提示

++-- 实际修改行 / Col变量。我想你想做 maze[row - 1][col] == 0 然后,一旦您移动,请更新您的行位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top