我写了一个程序来生成一个迷宫并解决它,但它在解决部分有一些错误。
它形成一个像5 * 5或16 * 16的方形迷宫。
迷宫始于(2D数组中的0,0,结束于(size() - 1,size() - 1)。
我使用'1'来表示结束的路径。 你可以从下图中看到有一些不需要的'1',虽然程序可以找到退出。
对不起大家,我真的无法调试这个。任何人都可以帮助我或指导我吗? 非常感谢!
我的代码就在这里 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;
答案 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消息,因此您可以将这些决策点与您看到展开的解决方案相关联,这样您就可以查看是否/何时出现问题。如果您发现问题,可以在输出中向上滚动以查看出现问题的地方。
祝你好运!