算法和数据结构(Python)——广度优先算法(BFS)

本文详细介绍了广度优先搜索(BFS)算法的应用和解决思路,通过两个例题——leetcode 994 腐烂的橘子和101 对称二叉树,阐述BFS在寻找最短路径和判断对称性问题中的运用。在腐烂的橘子问题中,利用BFS求解最小感染时间;在对称二叉树问题中,展示了如何用BFS判断二叉树的镜像对称性。文章还探讨了BFS的截止条件和遍历技巧,并提供了相关代码分析。
摘要由CSDN通过智能技术生成

适用情况

给定初始状态目标状态,要求从初始状态到目标状态的最短路径

模式

<1.建立列表,插入节点>
queue = []
queue.append([node])
depth = 0
<2.循环遍历节点>
while queue:      满足什么条件停止遍历
	depth += 1
	<逐层遍历>这一步只有在需要计算depth时才需要,表示循环遍历完一层
	for i in range(len(queue)):
		<3.取出节点>
		node = queue.pop(0)
		<4 插入下一层节点>通常要设置条件,插入节点或return false停止循环
		queue.append()	

解决思路

  1. 广度优先的判断关键是什么时候不满足条件了就退出,如果满足条件就继续在while循环里面循环,只到所有节点循环完
    记住这张图
    https://blog.csdn.net/raphealguo/article/details/7523411

例题一

leetcode 994 (easy) 腐烂的橘子
在给定的网格中,每个单元格可以有以下三个值之一:
值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。

输入:[[2,1,1],[1,1,0],[0,1,1]]
输出:4

解题思路:

  1. 可以设置腐蚀,但是不知道怎么找最短?已知速度求最短时间,即求最短路径,用广度优先。把一层内的所有节点遍历一遍,得到的结果是下一层的节点,然后再循环
  2. 注意观察怎么把思路用代码实现,怎么满足同时感染?判断是否同时感染的关键是计时点,遍历完当前层内的所有橘子并进行感染,然后时间再加1,就实现了同时感染
def orangesRotting(grid):
    time = 0
    row = len(grid)
    col = len(grid[0])
    count = 0
    
    # <1.建立列表>
    rotten = []

    for i in range(row):
        for j in range(col):
            if grid[i][j] == 2:
                rotten.append([i,j])   
            elif grid[i][j] == 1:
                count += 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值