1

我将以某种方式使用堆栈的链表实现来生成迷宫的解决方案。迷宫是从 .txt 文件中读取的,由 0 代表开放空间和 1 代表墙壁。在此处输入图像描述 <- 很确定出口必须在底行?那么这三个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;
            }
        }

在 ++ 之前执行 [ 的问题: 在此处输入图像描述

任何帮助表示赞赏,谢谢!

4

2 回答 2

2

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

于 2011-11-30T02:26:27.000 回答
0

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

于 2011-11-30T02:22:25.830 回答