回溯法解决迷宫问题(方法1---递归)

一、解决思路

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值