迷宫_逆向
迷宫_逆向
深度优先算法介绍
深度优先搜索算法(Depth-First-Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。
深度优先算法在迷宫中的使用
二维的迷宫:
- 使用递归的方法,用栈的思想放入和取出路径,用数组的方式存放迷宫图
- 使用for循环遍历四个方向,在每个节点选择走的方向,如果按这个方向向下走一步能够满足条件(不是墙并且没有到达过),就可以将这一步的目标地址进行标记(已经走过),并且将走的方向放入路径之中
- 当死路的时候就会向上返回。如果四个方向都遍历,没有一个方向能够满足条件,那么就会返回上一轮,并且将这步错误的方向在路径之中去除,并且将这个地址再次标记为未可达
- 递归的结束条件。已经到达了目标地址的坐标,就可以返回这个路径了
二维迷宫题算法实现
C语言版本
map:迷宫地图,数组需要在声明的时候进行初始化
stages:上下左右的表示方法
n,m:一共有多少排多少列
stx,sty:迷宫起始的位置,需要对应数组的下标
endx,endy:迷宫终点的位置,需要对应数组相应的下标
1 |
|
python版本
使用脚本的时候根据题目的不同需要进行修改的脚本之中的参数有
map:map使用数字类型的数字表示,还是用char类型的数组表示,map的声明以及每一步的是否正确的判断条件都是不一样的
stx和sty:迷宫的起点,数组的起点是从0开始标识的
endx和endy:迷宫的终点,注意数组的下标
signdirect:题目之中这四个方向所代表的字符都是不一样的,需要根据题目的要求具体的表示
1 | # map是迷宫 |
如果是用字符串的形式声明迷宫时,map的表示方式,及脚本之中需要改变的地方
1 | map = ["00000","01100","00100","00110","00000"] |
三维迷宫题的算法实现
python版本
这里需要输入的参数和二维的脚本差不多,只是要多一个z轴上的坐标
1 | import sys |
有时候迷宫的走法不止一个,就取走的路程最小的那个就可以了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gruge's Blog!
评论