定义:
图 (graph) 是由一些点 (vertex) 和这些点之间的连线 (edge) 所组成的;其中,点通常被成为 "顶点(vertex)",而点与点之间的连线则被成为 "边或弧"(edege)。通常记为,G=(V,E)。
DFS(Depth-first-search) 深度优先遍历
形象的说, 就像搜索文件夹, 从第一个开始文件夹开始搜索到底, 然后再搜索第二个到底, 然后第三个…. 一直到最后.
官方的说:
a) 假设初始状态是图中所有顶点都未曾访问过,则可从图 G 中任意一顶点 v 为初始出发点,首先访问出发点 v,并将其标记为已访问过。
b) 然后依次从 v 出发搜索 v 的每个邻接点 w,若 w 未曾访问过,则以 w 作为新的出发点出发,继续进行深度优先遍历,直到图中所有和 v 有路径相通的顶点都被访问到。
c) 若此时图中仍有顶点未被访问,则另选一个未曾访问的顶点作为起点,重复上述步骤,直到图中所有顶点都被访问到为止。
注:红色数字代表遍历的先后顺序,所以图 (e) 无向图的深度优先遍历的顶点访问序列为:V0,V1,V2,V5,V4,V6,V3,V7,V8
如果采用邻接矩阵存储,则时间复杂度为 O(n2);当采用邻接表时时间复杂度为 O(n+e)。