BFS/DFS-题目总结


图形问题,使用BFS/DFS都要考虑一个结点是不是已经被遍历过了。
不同的场景标记的方式不同,常见的有建辅助数组、直接改动原数组等。

DFS的代码通常比BFS要简洁一些,因为不用建队列、向外拓展也简单,不像BFS还要建数组方便遍历四周。

图的广度优先遍历可以找到某节点到所有节点最少步数,图的深度优先遍历可以找到无环图的拓扑结构

题型总结

BFS

多源BFS

与树不同,图的广度优先搜索的起点是多个的,首先要把所有的起点都加入到队列中,然后需要判断邻接的结点是否已遍历。

  • AAAAA542. 01 矩阵
    将所有是0的结点作为起点,加入到队列中,向外扩散。
  • AAAA994. 腐烂的橘子
    为了寻找最短的扩展次数,需要让烂橘子同时向外扩展。
    遍历数组找到所有的烂橘子加入道队列中。

对内容做抽象

有些BFS解法不容易想到,需要对题目内容进行抽象,然后把节点放入到队列当中,进行遍历。

二维矩阵

  • AAA463. 岛屿的周长
    一个陆地节点遇到越界或者海便算所做一条边。
  • AAAA934. 最短的桥
    计算一个坐标到另一个坐标的需要走多少步,不需要两头同时出发一起走,从一个坐标出发BFS遍历直到遇到另一个坐标,记录走过的步数即可。

岛屿问题:

DFS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值