2021-1-24

深度优先和广度优先

两种算法,需要遍历,尤其是广度优先算法,在不剪枝的情况下,复杂度还算是有点点高吧,毕竟要遍历一遍。

先说广度优先吧,个人觉得一般迷宫模型还是广度优先比较容易理解吧,也有人用深度优先算法来解迷宫,我个人觉得两个方法可能没太大区别,广度优先还好理解。当然大可能是因为我自己太菜了,理解不了里面的深意吧。经典的例题就是HDU - 2612 这个二维迷宫吧。但这里还是用一下POJ - 2251 这个题目吧。这个题目可以比较明显的体现出广度优先算法的一个优点,可以直接计算最短路径以及向四周的延申。大致的题意就是会有n层的二维矩阵迷宫叠加,如果有一处上下两层都是通道的话(即无障碍)就可以上下跳跃。先遍历所有数据,并且输入。在录入的时候就标记起点和终点。然后从起点开始,录入队中,之后向上下左右前后六个方位各自访问一遍,如果可以走,就继续录入队的末尾,并且距离为起点的距离+1.访问完之后,把队首的起点pop走,从刚刚找到能走的格子开始,重复上述步骤,找到能走的格子的时候,距离为之前格子的距离+1,找完pop掉之前的格子。如此不断地延申就可以找到终点并且有最短距离的数据。该算法用到了队概念,因为该算法的思维就是每一次只向自己四周唯一一格的位置延申,和队里面的先进先出,不能说完全重合,只能说是适合的。毕竟如果单纯的用栈或者数组其实也是可以解的,不过会比较难理解或者难写罢了。哦哦,这个怎么感觉和那个,拓扑里面的链表排序什么的挺像的,emmm。。。

至于深度嘛,个人觉得重点是在那个,时间回溯这个概念,每找到一个节点就标记该节点并且从分支继续延申,重复上述步骤。可以用于走迷宫,但我感觉还是用广度比较好理解和直观一点。深度感觉更适合,emmm,找到一个问题的所有情况,多用于所有的数字排列啊,棋盘放置啊这里类。深度算法会更抽象一点,这就导致它更容易和题目结合并且不被发现。怎么说呢,总感觉自己对他没有太深的理解,也只是浅浅的写了HDU - 2553 这一题,期待一手会不会有更深的用法好吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值