常见算法5、广度优先搜索 Breadth-First Search

如题所述

第1个回答  2022-06-13

1、定义

广度优先搜索 (Breadth-First Search)是最简便的图的搜索算法之一,又称 宽度优先搜索 ,这一算法也是很多重要的图算法的原型。广度优先搜索属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

2、应用

广度优先搜索被用于解决 最短路径问题(shortest-path problem)

广度优先搜索让你能够找出两样东西之间的最短距离,不过最短距离的含义有很多!使用广度优先搜索可以:

3、图简介

既然广度优先搜索是作用于图的一种算法,这里对图作一个简单的介绍,先不深入了解。

图由 节点 组成。一个节点可能与多个节点相连,这些节点被称为邻居。

广度优先算法的核心思想是:从初始节点开始,应用算符生成第一层节点,检查目标节点是否在这些后继节点中,若没有,再用产生式规则将所有第一层的节点逐一扩展,得到第二层节点,并逐一检查第二层节点中是否包含目标节点。若没有,再用算符逐一扩展第二层的所有节点……,如此依次扩展,检查下去,直到发现目标节点为止。即

广度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形。

例:假如你需要在你的人际关系网中寻找是否有职业为医生的人,图如下:

而使用广度优先搜索工作原理大概如下 :

1、Python 3 :

2、PHP :

1、《算法图解》 https://www.manning.com/books/grokking-algorithms
2、SplQueue类: https://www.php.net/manual/zh/class.splqueue.php