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

119 阅读2分钟

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

深度优先搜索

深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索直到到达指定顶点(终点)。深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止,然后再折返,开始搜索下一条候补路径

图解

01

1.jpg
A为起点,G为终点

02

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

03

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

04

4.jpg
此处选B

05

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

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

06

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

07

7.jpg
我们选择E

08

8.jpg
移动到E

09

9.jpg
将E直达的K设为候补顶点

10

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

11

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

12

12.jpg
现在搜索到顶点C

13

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

解说
深度优先搜索的特征为沿着一条路径不断往下,进行深度搜索。虽然广度优先搜索和深度优先搜索在搜索顺序上有很大的差异,但是在操作步骤上却只有一点不同,那就是选择哪一个候补顶点作为下一个顶点的基准不同。
广度优先搜索选择的是最早成为候补的顶点,因为顶点离起点越近就越早成为候补,所以会从离起点近的地方开始按顺序搜索;而深度优先搜索选择的则是最新成为候补的顶点,所以会一路往下,沿着新发现的路径不断深入搜索。