欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

迷宫老鼠

程序员文章站 2023-12-24 20:43:39
...

1.迷宫老鼠问题是要寻找一条从入口到从出口的路径。
迷宫老鼠
2.设计思路:
假定用n×m的矩阵来描述迷宫,位置(1,1)表示入口,(n,m)表示出口,n和m分别代表迷宫的行数和列数。
迷宫中的每个位置都可用其行号和列号来指定。在矩阵中,当且仅当在位置(i,j)处有一个障碍时其值为1,否则其值为0。
效果图:
迷宫老鼠
1.偏移量: 创建一个偏移量(类型为position)数组专门记录移动操作的偏移量。

//初始化偏移量,用position的形式定义了右下左上的移动方式。
    position offset[4];
    offset[0].row = 0;offset[0].col = 1;
    offset[1].row = 1;offset[1].col = 0;
    offset[2].row = 0;offset[2].col = -1;
    offset[3].row = -1;offset[3].col = 0;

迷宫老鼠2.每次移动操作:
定义option为0,lastoption为3。表示从右到上依次尝试。

while (option<=lastOption){
            r = here.row+offset[option].row;
            c = here.col+offset[option].col;
            if (maze[r][c] == 0) break;
            option++;
        }

3.找到/没找到 相邻的通路后:
1)有通路:

if (option<=lastOption){//相邻的有通路
            path->push(here);
            here.row = r;
            here.col = c;
            maze[r][c] = 1;//设置为1,防止重复访问
            option = 0;
        }

2)无通路:

else{
            if (path->empty()) return false;//退无可退
            position next = path->top();//取出上一个节点
            path->pop();
            if (next.row==here.row){
                option = 2+next.col-here.col;//返回的是左相邻或者是右相邻
            } else {
                option = 3+next.row-here.row;//返回的是上相邻或者下相邻
            }
        }

如果最后能够执行完while循环表示可以找到通路,此时栈中存的就是到终点的路径(不包含终点)。

上一篇:

下一篇: