迷宫求解3--带环的多出口迷宫求最短路径

本文介绍了一种解决带环多出口迷宫求最短路径的方法。通过递归式顺时针探测,结合特定的落脚规则和标记规则,找到最短路径。在到达出口时,会比较当前路径与已知最短路径的长度,并在必要时更新最短路径。代码实现中还包括了路径释放和拷贝的细节。
摘要由CSDN通过智能技术生成

假如有以下带环的多出口迷宫地图:
这里写图片描述
这里的思路与之前迷宫求解多出口求最短路径相似,不同的是,这里需要多传一个参数pre,保存当前要落脚的点的上一次走到这个点的大小
1.判定当前点是否能落脚
2.如果能落脚,进行标记,同时将当前点插入到cur_path栈中,更新pre
3.判断是否是出口
a)如果是出口,就比较cur_path与short_path的大小,如果cur_path小就代替short_path
b)如果不是出口,以当前点为准则,采用递归式顺时针继续探测四周
4.如果四周都探测过了,进行回溯
解释:
这里的判断是否能落脚的规则变了:
1.判断当前点是否在地图上,相当于合法判定
2.判定当前点是否是墙
3.如果当前点是1,则可以直接落脚
4.如果当前点已经被标记过了,就比较当前点与pre的大小,当当前点大于pre+1时,就可以落脚,否则不能落脚(结合如下代码看);
这里的标记规则也变了:
首先,入口点的pre规定为(-1,-1),当pre为(-1,-1)时,就标记入口点为2,此后标记规则为,当前落脚点为pre+1;

具体代码实现如下:

 void MazeInit3(Maze* maze){                                                                                 
     if(maze == NULL){
         return;
     }
     int map[MAX_ROW][MAX_COL] = {
         {
  0,1,0,0,0,0},
         {
  0,1,1,1,0,0},
         {
  0,1,0,1,1,1},
         {
  1,1,1,1,0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值