94 struct Point{
95 //1, can pass
96 //0, can't pass
97 int isPass;
98 //1, is go through
99 //0, isn't go through
100 int isThrough;
101 };
位置信息可用PosType存储。就是:
struct PostType
{
int x;
int y;
};
const int MAZE_SIZE_X = 10;
const int MAZE_SIZE_Y = 10;
class Maze{
public:
Maze(int x, int y);
~Maze();
int init();
//参数指向的位置是否可以通过?该位置可通且未曾走过(这个地方,我看书上是讲过了,但是自己做的时候还是忘记了,最后GDB调试才发现问题,走过的格子不能再走了,避免在死胡同绕圈)
bool Pass(PosType&);
//标记该位置走过
bool FootPrint(PosType&);
//根据该位置及方向决定下一个格子,参数是引用类型,所以会改变实参。有好有坏吧。
Status NextPos(PosType& curpos, int dir);
//标记该格子是不能通过的,当该格子四个方向都走不通才会有这种待遇。
bool MarkPrint(PosType&);
int PrintPath();
private:
vector<vector<Point> > maze;
int x;
int y;
};
下一步要想,压栈的时候,压入什么内容?第一,最重要的是,该格子的位置:PosType;第二,从该格子出发的方向;第三,作为记录,要记下当前是第几步。如下:
68 struct Elemtype{
69 int ord;
70 PosType seat;
71 int di;
72 };
下一步就是按照如下方法走了:
如果当前位置可通,则切换下一个格子为当前位置;
如果当前位置不可同,则顺着来的方向,找到倒数第一个格子A,切换下一个格子为当前位置,如果A四个方向都试过了,还是不通,则再次
出栈一个B,按照刚才的方法测试,直至栈空为止。