迷宫求解

 
迷宫求解     算法简单描述如下: 
      方法:从入口出发,顺某一方向向前探索,若能走通,则继续往前走,否则沿原路退回,换一个方向继续探索,直到所有可能的通路都探索到为止,为了能按原路返回,需要一个来保存从入口到当前位置的路径 
当前位置:在搜索过程中某一时刻所在途中某个方块的位置

 

设当前位置的初值为入口位置:
Do{
     若当前位置可通:
         则{ 将当前位置入栈,
                    若该位置是出口,则结束
                    否则切换当前位置的东邻块为新的当前位置
              }
     否则 ,
      若栈不空且栈顶位置尚有其他方向为探索,
          则设定新的当前位置为沿顺时针方向找到的栈顶位置的下一相邻块
      若栈不空但栈顶位置的四周均不通,
           则{ 删除栈顶位置
                   若栈不空,则重新测试新的栈顶位置,直到找到一个可通的相邻块或出栈至栈空}
}while (栈不空) 
算法如下: 
Status Mazepath(Mazetype maze,postype start,postype end)
{ Initstack(S);   curpos=start;// 当前位置为“入口位置”
    curstep=1   //通道块在路径中的“序号”
    do{
         if (pass(curpos)){
             FootPrint(curpos); //留下足迹
             e=(cursetp,curpos,1);
             push(S,e);    //加入路径
             if(curpos==end) return(true); //到达终点
             curpos=Nextpos(curpos,1); //下一位置
             curstep++; 继续下一步
            }  
else {//当前位置不通
                if(!stackempty(S)){
                    pop(S,e)
                    while(e.di==4&& !stackempty(S)) {
                        markprint(e.seat);   pop (S,e); 
                     }//while     // 留下不能通过的标记 , 并退回一步
                     if ( e.di<4){
                        e.di++; push(S,e); //换方向探索
                        curpos=nextpos(e.seat,e.di); } //if
                }//if
            }//else
   }while(!stackempty(S));
    return(false);
}//Mazepath
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值