深入解析BFS算法原理,带图解说明,并附带Python代码实现BFS算法
短信预约 -IT技能 免费直播动态提醒
BFS又名广度优先搜索,和DFS算法一样都是递归算法,不同的是,BFS算法通过队列,在避免循环的同时遍历目标所有节点。
BFS算法的工作原理图解
以具有5个节点的无向图为例,如下图:
从节点0开始,BFS算法首先将其放入Visited列表并将其所有相邻节点放入队列。
接下来,访问队列前面的节点1,并转到节点1相邻的节点。因为节点0已经被访问过,所以访问节点2。
节点2有一个未访问的相邻节点4,但因为节点4在队列的最后,因此我们要先访问位于队列前面的节点3。
队列中只剩下节点4没有被访问,所以最后访问节点4。
至此,已经完成了此无向图的广度优先遍历。
BFS算法的伪代码
create a queue Q
mark v as visited and put v into Q
while Q is non-empty
remove the head u of Q
mark and enqueue all (unvisited) neighbours of u
Python代码实现BFS算法
import collections
def bfs(graph, root):
visited, queue = set(), collections.deque([root])
visited.add(root)
while queue:
vertex = queue.popleft()
print(str(vertex) + " ", end="")
for neighbour in graph[vertex]:
if neighbour not in visited:
visited.add(neighbour)
queue.append(neighbour)
if __name__ == '__main__':
graph = {0: [1, 2], 1: [2], 2: [3], 3: [1, 2]}
print("Following is Breadth First Traversal: ")
bfs(graph, 0)
以上就是深入解析BFS算法原理,带图解说明,并附带Python代码实现BFS算法的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341