求解:迷宫问题求解一定要打完吗

利用栈实现迷宫问题求解问题的求解(找到迷宫问题求解的通路如下面给定的迷宫问题求解,0代表通路1代表不通,利用栈的特点求出他的通路)

问题:假设下图1是某迷宫问题求解的地图(0代表路径1代表墙壁),问此迷宫问题求解是否有条通路

用栈来实现解决问题,主要步骤是

(1)将迷宫问题求解的入口坐标設为当前坐标

(2)将当前坐标压栈将当前坐标上的值设为2(0变为2),代表已走过的路

(3)判断当前坐标的四周(上下左右)是否是可以通(为0则通)的,如果是通的那就将它的坐标设为当前坐标

(4)重复(2)(3)的操作

(5)若遇到如图1中标注的坐标,四周都不可以通(四周都不为0)那么就回退(将栈中的坐标弹出),将栈顶坐标设为当前坐标重复步骤(3)

(6)当退回到两路的相交处则当前周围有路可鉯通,重复步骤(2)(3)

(7)只要判断当前位置在迷宫问题求解地图的边缘(只有边界值为0时当前位置才可以到达边界),那么就可以判断该迷宫问题求解是否可以通

栈中的元素是迷宫问题求解通路的路线若栈为空,则迷宫问题求解没有通路

//若不可以通那么就判断令一個方向的位置的值 cur = path.top();//当四周都不可以通则回退将当前位置置为栈顶元素的坐标位置

当迷宫问题求解有出口,则运行结果如图:返回1

当迷宫問题求解没有出口时运行结果如下图:返回1

给定一个迷宫问题求解地图实際就是一个二维的数组,其中0代表可通过1代表有障碍不能通过,求出所有路径这种搜索问题一般使用深度搜索DFS,从出口处开始根据選择的不同方向(上下左右)来到达另一个位置,这时可以把新到达的位置看做是新的起点这样就可以递归的求解同样的子问题,递归結束的条件是最后到达了终点在搜索的过程中,我们可以进行剪枝操作我们先沿着某个方向走,并沿途把走过的节点进行标记沿着某个节点一直搜索下去,不中南墙不回头直到碰到障碍,或者数组越界走到了已经访问过的节点,这时就直接返回不必再继续搜索丅去,可以称之为回溯实际是递归的返回。

实际还可以求解所有路径中最小的路径只要在终点判断的逻辑中加入一个变量存储路径的長度即可。

我要回帖

更多关于 迷宫问题求解 的文章

 

随机推荐