c ++堆栈迷宫解决程序

时间:2012-12-12 05:43:09

标签: c++ stack maze

我写了一个程序来生成一个迷宫并解决它,但它在解决部分有一些错误。

它形成一个像5 * 5或16 * 16的方形迷宫。

迷宫始于(2D数组中的0,0,结束于(size() - 1,size() - 1)。

我使用'1'来表示结束的路径。 你可以从下图中看到有一些不需要的'1',虽然程序可以找到退出。

对不起大家,我真的无法调试这个。任何人都可以帮助我或指导我吗? 非常感谢!

屏幕截图在这里。我不允许直接发布图片 https://photos-1.dropbox.com/t/0/AADjdwSgmLdVKCZrI1C-gDvwZ9ORj0rGbv3UJ7AYqXWeuA/10/7014161/png/2048x1536/2/1355295600/0/2/bug.png/5sQR3E_jcow4lWIy9cFf2FYbmwl0C_sd2cfCyMPe0MU

我的代码就在这里 https://www.dropbox.com/s/vldkcv4fy6bp1ff/Source.cpp

问题解决 谢谢大家

我解决迷宫的原始代码是

`else if(randomNum == 1){

        if (y+1<myMaze.size() && !myMaze[x][y+1].left && !myMaze[x][y+1].visited)
        {
            y++;
            myMaze[x][y].truePath=true;
            myMaze[x][y].visited=true;
            s1.push(myMaze[x][y]);
            randomNum=rand()%4;
        }
        else
        {
            rightBusted=true;
            randomNum=rand()%4;
        }`

然后我只是在if语句中添加这些代码,将bool变量重置为false,然后问题解决了

            downBusted=false;
            rightBusted=false;
            topBusted=false;
            leftBusted=false;

1 个答案:

答案 0 :(得分:2)

你可以调试一下,伙计。这是如何做。你已经拥有了完成它所需的工具;他们所需要的只是一点调整。

调试它的最佳工具是displayMaze()例程。您只需要向其添加两个可选参数,即可将其转换为功能强大的调试工具:

void displayMaze(const vector < vector<Cell> >& arr, int curX=-1, int curY=-1)
{
    .
    .
    .

现在,如果来电者省略了curX&amp; curY,编译器填写默认值-1。现在稍后在该功能中,打印一个不同的字符以指示“当前迷宫位置”。这就是我做的方式,“似乎有效”,但我不能保证,因为我没有理解你的逻辑:

            if (curX>=0 && curY>=0 && curX==i/2 && curY==j) // ++++++++++++
                cout << " * "; // * means "current position" // ++++++++++++
            else if (!arr[i/2][j].truePath)
                cout << "   ";
            else
                cout << " 1 ";

现在,您的程序中内置了一个强大的调试工具。当main()在没有两个额外参数的情况下调用它时,不会打印星号。但是当你从solveMaze()调用它时,你可以指定“当前位置”,这样它就会用'*'标记该位置。在solveMaze()中,添加几个变量来跟踪“当前位置”......

int x=0, y=0;
int curX=x, curY=y; // ++++++++++++++++

...然后,在循环的顶部,只需调用强大的调试工具,即可逐步获得整体解决方案的当前状态:

int i=0;
while (!exitFound)
{
    displayMaze(myMaze, curX, curY); // +++++++++++++++++
    .
    .
    .

现在,只要你改变你认为什么是“当前位置”,只需更新curX和CURY因此,你的调试工具将让你更新,所以你可以看到的解决方案,因为它展现图形(当然,伪图形)。您甚至可以在关键逻辑决策点添加调试cout消息,因此您可以将这些决策点与您看到展开的解决方案相关联,这样您就可以查看是否/何时出现问题。如果您发现问题,可以在输出中向上滚动以查看出现问题的地方。

祝你好运!