Problem5802--学习系列——DFS

5802: 学习系列——DFS

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

Description

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

将可以从A 直达的三个顶点B、C、D 设为下一步的候补顶点。

此处B、C、D 同时成为候补,所以我们随机选择了最左边的顶点。候补顶点是用“后入先出”(LIFO)的方式来管理的,因此可以使用“栈”这个数据结构。

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

将可以从B 直达的两个顶点E 和F 设为候补顶点。

此时,最新成为候补顶点的是E 和F,我们选择了左边的顶点E。

移动到选中的顶点E 上。

将可以从E 直达的顶点K 设为候补顶点。

重复上述操作直到到达终点,或者所有顶点都被遍历为止。这个示例的搜索顺序为A 、B 、E 、K 、F 、C 、H。

现在我们搜索到了顶点C。

到达终点G,搜索结束。

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

Source/Category