算法和数据结构4.3深度优先搜索

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

算法和数据结构4.3深度优先搜索_第1张图片
search.png

步骤

标记A为起点G为终点。一开始在起点A上。

将A标记为正在搜索的顶点,B、C、D为下一步的候补顶点。

搜索顶点A,A不是G(终点),将A标记为已搜索状态。

从候补顶点中选择一个顶点,优先选择最新成为候补顶点的顶点,如果候补顶点是同时产生的,那么可以从中随意选择一个。

这里选择顶点B作为正在被搜索的顶点,B从候补顶点中移除。(这里候补顶点采用的是后入先出的方式来管理的LIFO,因此可以使用栈这个数据结构)。

那么E和F就被添加到为候补顶点。

搜索B,B不是G(终点),将B标记为已搜索状态。

取候补顶点中最新的顶点作为正在搜索的顶点。

这里取E作为正在被搜索的顶点。

将E从候补顶点中移除。

将K添加为新的候补顶点。

搜索E,E不是G(终点),将E标记为已搜索状态。

从候补顶点中取出顶点K,将K作为正在被搜索状态。

搜索K,K不是G(终点),将K状态改为已搜索。

从候补顶点中取出F,将顶点F标记为正在搜索的状态。

以此类推

...

...

深度优先搜索的搜索顺序是A、B、E、K、F、C、H、G

深度优先搜索的特征为沿着一条路径不断往下,进行深度搜索。虽然广度优先搜索和深度优先搜索在搜索顺序上有很大的差异,但是在操作步骤上却只有一点不同,那就是选择哪一个后不定点作为下一个顶点的基准不同。
广度优先搜索选择的是最早成为候补顶的顶点,而深度优先搜索选择的是最新成为候补顶点的店,随意会一路往下,沿着发现的新路径不断深入搜索。

你可能感兴趣的:(算法和数据结构4.3深度优先搜索)