我现在遇到了跟踪迷宫中老鼠运动的两个问题。
当遇到转弯情况或进入交叉路口时(特别是在右下方交叉路口),跟踪会变得混乱: Maze tracing gif
当看到它已经通过的路径时,老鼠会留下额外的痕迹(因为我的递归顺序): Extra trails left behind pic
这是我的代码:
bool IsValidBlock(char map[30][100], Stack mystack, int x, int y)
{
if (mystack.Top() == '1' || map[x][y] == 'X')
{
return false;
}
return true;
}
bool MazeTraversal(char map[30][100], Stack mystack, int x, int y)
{
mystack.push(map[x][y]);
if (IsValidBlock(map, mystack, x, y) == false && map[x][y] == 'X')
{
gotoxy(y, x);
Sleep(100);
cout << "R";
if (map[x][y + 1] == 'X')
{
gotoxy(y + 1, x);
cout << " ";
}
if (map[x + 1][y] == 'X')
{
gotoxy(y, x + 1);
cout << " ";
}
if (map[x - 1][y] == 'X')
{
gotoxy(y, x - 1);
cout << " ";
}
if (map[x][y - 1] == 'X')
{
gotoxy(y - 1, x);
cout << " ";
}
}
if (IsValidBlock(map, mystack, x, y) == false)
{
mystack.pop();
return false;
}
if (mystack.Top() == '0')
{
gotoxy(y, x);
Sleep(100);
cout << "R";
map[x][y] = 'X'; //marks the visited block
if (map[x][y + 1] == 'X')
{
gotoxy(y + 1, x);
cout << " ";
}
if (map[x + 1][y] == 'X')
{
gotoxy(y, x + 1);
cout << " ";
}
if (map[x - 1][y] == 'X')
{
gotoxy(y, x - 1);
cout << " ";
}
if (map[x][y - 1] == 'X')
{
gotoxy(y - 1, x);
cout << " ";
}
}
if (MazeTraversal(map, mystack, x, y + 1)) { return true; } //right
if (MazeTraversal(map, mystack, x + 1, y)) { return true; } //down
if (MazeTraversal(map, mystack, x - 1, y)) { return true; } //up
if (MazeTraversal(map, mystack, x, y - 1)) { return true; } //left
return false;
}
我认为这两个问题都是由我的函数的递归性质引起的
我试图通过再次标记(不在此代码中)来标记已经访问过一次的路径('X'),因此它不会留下痕迹,但它似乎没有帮助反正
有人可以对此有所了解吗?感谢您的阅读,感谢任何帮助。