栈实现迷宫求解问题

一开始,感觉毫无头绪,不知道从哪开始做起。做完了感觉这个没有想象中的复杂。这是代码地址:

总体感触是:不要着急,一步一步来,问题很容易解决的。

首先是要实现一个迷宫的地图。 明确如何保存地图,用vector实现二维数组,每个元素代表地图的一个格子。
要保存哪些信息。一张地图的某一个方格需要标示:能否通过,是否走过了。

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;

};

地图四周一圈都设置为不可走,避免每次判断是否越过了地图边界。
这样可以大致写出迷宫类:Maze

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,按照刚才的方法测试,直至栈空为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值