你好堆栈溢出的人,所以我有一个问题。我正在用C ++编写一个Maze Traversal用于学校项目,而且我遇到了障碍。我有一个算法来检查我可以在迷宫中移动的不同位置。我的问题是,即使(我做了调试)有效的移动返回true,迷宫实际上也不会改变位置。为什么不? (对不起,如果这是一个非常愚蠢的问题,但我会感激任何帮助!)谢谢!!!
//Said algorithm
// 4. cycle through directions to move in until I find a possible move
if (validMove(maze, y + 1, x)) // UP
maze[y][x] = maze[y + 1][x];
else if (validMove(maze, y, x + 1)) // RIGHT
maze[y][x] = maze[y][x + 1];
else if (validMove(maze, y - 1, x)) // DOWN
maze[y][x] = maze[y - 1][x];
else if (validMove(maze, y, x - 1)) // LEFT
maze[y][x] = maze[y][x - 1];
//validMove func
bool validMove( char maze[MAZE_SIZE][MAZE_SIZE], int y, int x)
{
if (maze[y][x] == '.') {
return true;
}
return false;
}
答案 0 :(得分:1)
我将假设'。'在迷宫中表示一个开放空间,任何其他字符表示一堵墙。我还假设x和y表示你当前的位置。
看起来你正在测试你是否可以去一个特定的空间,如果可能的话,然后你将当前空间中的角色设置为你要移动的空间中的角色(我不认为)你打算这样做)。由于这两个字符都可能是“。”,因此实际上并没有改变任何东西。
我猜你实际上想通过将当前位置的字符更改为特殊字符(以指示您所采用的路径)为自己留下痕迹,然后将x和y更改为x和y的新值
maze[y][x] = '+';
if (validMove(maze, y + 1, x)) // UP
y += 1;
else if (validMove(maze, y, x + 1)) // RIGHT
x += 1;
else if (validMove(maze, y - 1, x)) // DOWN
y -= 1;
else if (validMove(maze, y, x - 1)) // LEFT
x -= 1;
答案 1 :(得分:0)
所以你可能应该维护一个position
变量,std::pair
,这可能是你在迷宫中遍历的坐标。
所以我希望你的if语句看起来更像这样:
if (validMove(maze, y + 1, x)) // UP
position.first++;
else if (validMove(maze, y, x + 1)) // RIGHT
position.second++;
else if (validMove(maze, y - 1, x)) // DOWN
position.first--;
else if (validMove(maze, y, x - 1)) // LEFT
position.second--;
如果在您的打印循环中输出您添加的数组,那么您唯一能看到此效果的方法是:
cout << (y == position.first && x == position.second) ? 'x' : maze[y][x];