算法初接触 | 图的搜索[广度优先搜索]

106 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天

广度优先搜索

广度优先搜索是一种对图进行搜索的算法。假设我们一开始位于某个顶点(即起点),此时并不知道图的整体结构,而我们的目的是从起点开始顺着边搜索,直到到达指定顶点(即终点)。在此过程中每走到一个顶点,就会判断一次它是否为终点。广度优先搜索会优先从离起点近的顶点开始搜索

图解

01

1.jpg
A为起点,G为终点,此时不知G的位置

02

2.jpg
将可以从A直达的三个顶点B、C、D设为候补顶点

03

3.jpg
从候补顶点随意选中一个

04

4.jpg
此处选B

05

5.jpg
移动到选中的顶点B上。此时我们在B上,所以B变为红色,同时将已经搜索过的顶点变为橙色

提示:此处,候补顶点是用“先入先出”(FIFO)的方式来管理的,因此可以使用“队列”这个数据结构。

06

6.jpg
将B直达的E、F设为候补顶点

07

7.jpg
此时,最早设为候补顶点的是C、D,选择左边的顶点C

08

8.jpg
移动到选中的顶点C

09

9.jpg
将C直达的H设为候补顶点

10

10.jpg
重复操作直到达到终点,或将所有顶点都经历遍为止

11

11.jpg
该示例的搜索顺序是A、B、C、D、E、F、G、H、I、J、K

12

12.jpg
完成从A-I的搜索,现在顶点在J

13

13.jpg
到达终点G,搜索结束

解说
广度优先搜索的特征是从起点开始,由近及远进行广泛的搜索。因此,目标离起点越近,搜索结束就越快。

补充说明
如果图中有闭环,起点和终点是同一顶点,如图
14.jpg