需要帮助追踪迷宫中小鼠的运动

时间:2017-12-01 01:18:53

标签: c++ recursion maze

我现在遇到了跟踪迷宫中老鼠运动的两个问题。

  1. 当遇到转弯情况或进入交叉路口时(特别是在右下方交叉路口),跟踪会变得混乱: Maze tracing gif

  2. 当看到它已经通过的路径时,老鼠会留下额外的痕迹(因为我的递归顺序): Extra trails left behind pic

  3. 这是我的代码:

    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'),因此它不会留下痕迹,但它似乎没有帮助反正

    有人可以对此有所了解吗?感谢您的阅读,感谢任何帮助。

0 个答案:

没有答案