堆栈解决迷宫搜索问题

问题描述:

迷宫(maze)是一个矩形区域,它有一个入口和一个出口,入口位于迷宫的左上角,出口位于迷宫的右下角,在迷宫的内部包含不能穿越的墙和障碍物。迷宫路径搜索问题时寻找一条从入口到出口的路径,该路径是由一组位置组成的,每个位置上都设有障碍,且每个位置(第一个除外)都是前一个位置的东、南、西或北的邻居。

基本思路:

从迷宫的入口出发,沿正东方向顺时针对当前位置相邻的东、南、西、北四个位置依次进行判断,搜索可通行的位置。如果有,移动到这个新的相邻位置上,如果新位置是迷宫出口,那么已经找到一条路径,搜索工作结束,否则从这个新位置开始继续搜索通往出口的路径;若当前位置四周均无通路,则将当前位置从路径中删除出去,顺着当前位置的上一个位置的下一个方向继续走,直到到达出口(找到一条通路)或退回到入口(迷宫没有出路)时结束。

1.设计思路

1)迷宫数据结构的设计

设迷宫为m行n列矩阵,利用maze[m][n]来表示一个迷宫,“maze[i][j]=0或1”,其中0表示不通,1表示通。当从某点向下试探时,中间点有4个方向(东,南,西,北)可以试探,而四个角点有两个方向,其他边缘点有三个方向,为使问题简单化用maze[m+2][n+2]来表示迷宫,设迷宫的四周的值全部为0。

2)路径试探方向的数据设计

在迷宫矩阵中,每个点有4个方向去试探,用x表示行,y表示列。试探顺序可规定为:从当前位置向前试探的方向为从正东沿顺时针方向进行。为简化问题,方便地求出新点的坐标,将从正东开始沿顺时针进行的东、南、西、北四个方向用0,1,2,3表示,坐标增量放在一个结构数组move[4]中,每个元素由两个域组成:横坐标增量x和纵坐标增量y。如下所示:                     x                     y

0 0 1
1 1 0
2 0 -1
3 -1 0
3)栈路径中数据元素的设计

用栈保存搜索的路径,路径中的每个数据元素不仅是顺序到达的各点坐标,还要记录从该点继续前进的方向,即没走一步,栈中记录的内容为(行,列,前进的方向)。

4)防止重复到达某点

当到达某点(i,j)后使maze[i][j]置-1,以便区别未到过的点,以防止重复试探某 位置的目的。

2.编程实现

import java.util.Stack;
class MPoint  //栈中的数据元素用Mpoint表示

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值