持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天
广度优先搜索
广度优先搜索是一种对图进行搜索的算法。假设我们一开始位于某个顶点(即起点),此时并不知道图的整体结构,而我们的目的是从起点开始顺着边搜索,直到到达指定顶点(即终点)。在此过程中每走到一个顶点,就会判断一次它是否为终点。广度优先搜索会优先从离起点近的顶点开始搜索
图解
01
A为起点,G为终点,此时不知G的位置
02
将可以从A直达的三个顶点B、C、D设为候补顶点
03
从候补顶点随意选中一个
04
此处选B
05
移动到选中的顶点B上。此时我们在B上,所以B变为红色,同时将已经搜索过的顶点变为橙色
提示:此处,候补顶点是用“先入先出”(FIFO)的方式来管理的,因此可以使用“队列”这个数据结构。
06
将B直达的E、F设为候补顶点
07
此时,最早设为候补顶点的是C、D,选择左边的顶点C
08
移动到选中的顶点C
09
将C直达的H设为候补顶点
10
重复操作直到达到终点,或将所有顶点都经历遍为止
11
该示例的搜索顺序是A、B、C、D、E、F、G、H、I、J、K
12
完成从A-I的搜索,现在顶点在J
13
到达终点G,搜索结束
解说
广度优先搜索的特征是从起点开始,由近及远进行广泛的搜索。因此,目标离起点越近,搜索结束就越快。
补充说明
如果图中有闭环,起点和终点是同一顶点,如图