一、图
在正式进入广度优先搜索的学习前,先了解下图:
图分为有向图和无向图,由点vertices和边edges构成。图有很多应用,例如:网页爬取,社交网络,网络传播,垃圾回收,模型检查,数学推断检查和解谜等。
下面拿Pocket Cube魔方(2x2x2立方体魔方)来举个例子:
对于解魔方来说,可以先构建一个初始图,画出每个小立方可能状态上的点,还有可能移动的边,示意图如上图所示,这里讲师没有过多讲解其中的数学内容,只需要了解图在魔方上的解答应用。
二、图的表示
作者讲了三种图的表示方法:邻接表(Adjacency List),面向对象法和含糊表示法。重点是邻接表。
我这里就只讲邻接表,它跟散列表看起来有点像,就是定义了所有顶点v都属于顶点集V,邻接表Adj就是一个带连接的数列表,Adj[b] = {a, c} 说明b点和a和c点之间有连接。构建一个邻接表,复杂度估为θ(|V| + |E|)。
三、广度优先搜索
下图左侧展示了BFS的伪代码:
上图右侧举例来讲这个BSF代码的运行过程:
通过BSF,我们能轻松地得到图中任意两点之间的最短路径(Shortest Path),比如s到v的最短路径就是level[v]的大小,即3。
[MIT6.006] 13. Breadth-First Search (BFS) 广度优先搜索
原文:https://www.cnblogs.com/alvinai/p/12711774.html