Depth First Search(DFS) - 深度优先搜索


问题

用深度优先搜索从图的顶点开始遍历所有顶点。

解法

深度优先搜索类似二叉树的先序遍历,从顶点开始遍历所有顶点:

对于任意顶点,若该顶点已染红则跳过;若该顶点未染色则先访问本身并染红,再从所有邻节点中挑选未被染红的邻节点作为下一个搜索的顶点(跳过已染红的邻节点),继续递归的进行搜索操作。直到无法找到更多可以访问的顶点,本次搜索结束,继续遍历下一个顶点;

搜索顶点的顺序可以看作顶点的搜索距离,也可看作搜索时间(每搜索一个顶点消耗一个时间单位)。为了避免重复搜索,每访问一个顶点后需要将其染红。

下图演示无向图从顶点开始深度优先搜索的过程:

DepthFirstSearch1.png

顶点访问的顺序为。深度优先搜索时间复杂度为


Introduction To Algorithms


源码

DepthFirstSearch.h

DepthFirstSearch.cpp

测试

DepthFirstSearchTest.cpp