利用Python实现广度优先搜索BFS
广度优先搜索和深度优先搜索一样,都是最基础的搜索算法,为了体验广度优先搜索BFS的特点,在这篇文章中,我将使用Python来实现一个BFS解答题目的过程。
首先,让我们来看看BFS的定义:
广度优先搜索BFS(Breadth First Search)也称为宽度优先搜索,它是一种先生成的结点先扩展的策略。
其中,BFS的基本步骤有三步:
(1)从队列头取出一个结点,检查它按照扩展规则是否能够扩展,如果能,则生成一个新结点。
(2)检查新生成的结点,看它是否已经使用过,如果已经使用过,则放弃这个结点,然后回到第(1)步。否则,如果新结点第一次出现,就将它加入到队列尾。
(3)检查新结点是否目标结点。如果新结点是目标结点,则搜索成功,程序结束;若新结点不是目标结点,则回到第(1)步,再从队列头取出结点进行扩展。
具体步骤如下图所示:
下面,让我以LEETCODE的一个题目为例,用BFS的思路来解决这个问题:
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
至于答案,我先贴代码,之后再来讲解:
a = [[0, 0, 0], [0, 1, 0], [1, 1, 1]]
def BFS_1(mat):
m, n = len(mat), len(mat[0]) # 注意这里 m 为行数, n 为列数
verify_mat = [[False for _ in range(n)] for _ in range(m)