我试图通过使用右手规则解决迷宫,但我的回溯无法正常工作。每当它遇到死胡同时,它就会停止穿越。我的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;
}
答案 0 :(得分:0)
你的错误是一个逻辑错误。想想你是如何设计它的。
鼠标将移动到正方形,然后检查所有侧面。如果鼠标处于死胡同,则除了一个之外,所有侧面都将被关闭,但是将会访问一侧。
因此,如果您最终没有移动鼠标,则需要回溯。按照您所做的路径行进,直到右手规则为您提供尚未访问过的空间。