一、解决思路
1.创建迷宫,用0表示无障碍位置,1表示墙壁,比如迷宫m*p表示m行、p列,用二维数组Maze[m][p].但为了边缘处能够方便处理,在迷宫外层加一层几乎都为1的墙壁,除了进口和入口处设置为0,即辅助迷宫为Maze[m+2][p+2].
2.当进入迷宫时,如何选择前进的方向,如何判断哪个方向是0或者1呢?
这就要利用一个结构体来表示下一步的位置坐标,(g,h)以及前进方向dir【】;
struct offsets{ //位置在直角坐标下的偏移
int a,b; //a,b是x,y方向的偏移
char dir[3]; //dir是方向
};
offsets Move[8]={
{0,-1,"W"},{-1,-1,"NW"},{-1,0,"N"},{-1,1,"NE"},{0,1,"E"},{1,1,"SE"},{1,0,"S"},{1,-1,"SW"}};
3.回溯法核心思想就是每次试探一个点,沿着这个点试探下去,如果遇到死胡同,则退一步,再换方向试探,在这个过程中,每次试探时,应将该点标记,使得如果试探失败,下次试探时,不再试探这个位置。
利用标记数组mark[m+2][n+2],初始化为0