【数据结构】迷宫问题求解(链栈,DFS)

1.问题描述:

以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

2.基本要求:

(1)首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。

(2)编写递归形式的算法,求得迷宫中所有可能的通路。以方阵形式输出迷宫及其通路。

3.原理:

 

①. 链栈:用链式结构实现的栈,即只能从栈顶进出的链表,需要用到的函数有:栈的初始化:voidInit_S(Linkstack &S);判断链栈是否为空: intIsEmpty(Linkstack S);压栈:void Push(Linkstack&S,SElemType e);出栈:void Push(Linkstack&S,SElemType e)

②.  DFS遍历思想:定义一地图数组map[N],一标记数组vis[N],一方向数组dir[4][2]= { {1,0},{-1,0},{0,1},{0,-1}};表示下,上,右,左四个方向(因为二维数组是个矩阵)。从起点往终点方向走,遇到障碍停下(map[x]为障碍标记1时),走过处进行标记(vis[x]改为1)。一直走到终点。 

 

4.思路:

 

 ①a.对于非递归,首先初始化一个栈,将起点的坐标放入栈中,并使此处标记数组的值变为1(开始都初始化为0)。进入循环,当栈不空时,取栈顶,若不为终点坐标,则在周围四个方向进行搜索,满足条件(1不为障碍,2未走过)即放入栈中,将此坐标标记数组改为1,并用pre数组记录前驱,若为终点坐标,则输出这一组解,函数终止。b.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值