c++迷宫问题回溯法递归算法
本题采用栈和递归方法求解。(回溯法的概念请自行百度,简而言之就是正常人走迷宫的思路,先走,遇到死路退回去)
迷宫被表示成为一个mxn的二维数组,为了避免查询边界条件,我们用1包围迷宫。这个数组因此需要用maze[m+2][p+2]来声明。老鼠在迷宫中任何时候的位置都能通过[i][j]表示。老鼠每次可以向八个方向移动,将其可能的方向预先定义在struct move中。
q | move[q].a | move[q].b |
---|---|---|
N | -1 | 0 |
NE | -1 | 1 |
E | 0 | 1 |
SE | 1 | 1 |
S | 1 | 0 |
SW | 1 | -1 |
W | 0 | -1 |
NW | -1 | -1 |
当前位置[i][j]的下一个坐标[g][h]表示为:
g=i+move[SW].a; h=j+move[SW].b
使用另一个数组mark[m+2][p+2]记录老鼠已经走过的地方。
栈Stack定义为Items类型的栈,Items类型定义为:
struct Items{
int x,y,dir;
};
完整的程序如下