java 算法之递归的深度算法与广度算法

列子

有这么一张图,A为入口,J为出口,灰色区域为墙,如何从A找到J

在这里插入图片描述

1、深度优先算法

不断地沿着顶点的深度方向遍历 **假如查找顺序为上右下左**,那么该算法的顺序:A、B、C、D、E、F、G、H、I、J

理解这个可以用栈来理解,先进后出

1.A找到了B,把B入栈,B先从右边找到了C,把C入栈,然后C找到了D,D再入栈,D的上右下都没有可走的元素,那么就后退到C,即D出栈,C右边找过了,下面也没有可走的,然后就出栈,然后轮到B
2.B的右边找过了,该找下面了,找到了E,然后E在按上右下左的顺序 找到了F…直到找到J
在这里插入图片描述

2、广度优先算法:

1)先访问完当前顶点的所有邻接点。(这也就是“广”的意思)
2)先访问顶点的邻接点先于后访问顶点的邻接点被访问。
假如查找顺序为上右下左,那么该算法的顺序:A、B、C、E、D、F、G、H、I、J

理解这个可以用队列来理解,先进先出

1.首先A进(此时队列只有A)
2.把队列末尾A出列,找到B,把B加入队列首位(此时队列只有B)
3.把队列末尾的B出列,找到C,E,按顺序加入到队列首位,(此时队列顺序为E,C)
4.把队列末尾的C出列,找到D,加入到队列首位(此时队列顺序为D,E)
5.把队列末尾的E出列,找到F,加入到队列首位(此时队列顺序为F,D)
6…按照这种顺序直到找到出口J
在这里插入图片描述

总结:

深度优先算法:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。
优缺点:不全部保留结点,占用空间少;有回溯操作(即有入栈、出栈操作),运行速度慢。

广度优先算法:层次遍历,从上往下对每一层依次访问,在每一层中,上右下左(也可以从左上右下等顺序)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止,(可以把A看第一层, B看做第二层,C,E看做第三种, D,F看做第四层......)
优缺点:保留全部结点,占用空间大; 无回溯操作(即无入栈、出栈操作),运行速度快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值