用右手定则在迷宫中回溯
本文关键字:回溯 迷宫 右手定则 | 更新日期: 2023-09-27 17:52:49
我试图通过使用右手规则解决迷宫,但我的回溯不能正常工作。当它遇到死胡同时,它就会停止遍历。可能是if else语句出错了。然而,它很难在windows形式下调试,我甚至不知道我做错了什么。有人能告诉我我的函数出了什么问题吗?谢谢你!这是我对迷宫的设置:
public char[,] navigateMouse()
{
// check south
if (mouseMaze[yPos + 1, xPos] == ' ')
{
//mark the trail with '.'
mouseMaze[yPos, xPos] = '.';
mouseMaze[yPos + 1, xPos] = 'M';
yPos++;
}
// check east
else if (mouseMaze[yPos + 1, xPos] == 'X' && mouseMaze[yPos, xPos + 1] == ' ')
{
mouseMaze[yPos, xPos] = '.';
mouseMaze[yPos, xPos + 1] = 'M';
xPos++;
}
// check north
else if (mouseMaze[yPos + 1, xPos] == 'X' && mouseMaze[yPos, xPos + 1] == 'X' &&
mouseMaze[yPos - 1, xPos] == '.')
{
mouseMaze[yPos, xPos] = '.';
mouseMaze[yPos - 1, xPos] = 'M';
yPos--;
}
// check west
else if (mouseMaze[yPos + 1, xPos] == 'X' && mouseMaze[yPos, xPos + 1] == 'X' &&
mouseMaze[yPos - 1, xPos] == 'X' && mouseMaze[yPos - 1, xPos] == '.')
{
mouseMaze[yPos, xPos] = '.';
mouseMaze[yPos, xPos - 1] = 'M';
xPos--;
}
return mouseMaze;
}
您的错误是逻辑错误。想想你是怎么设计它的
鼠标将移动到一个正方形,然后检查所有的边。如果鼠标处于死胡同,那么所有的边都将被关闭,除了一条边,但这条边将被访问。
因此,如果最终鼠标没有移动,则需要回溯。沿着你所做的路径,直到右手规则给你一个你还没有访问过的空间。