图的遍历是从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。遍历过程中得到的顶点序列称为图遍历序列。
图的遍历过程中,根据搜索方法的不同,又可以划分为两种搜索策略:
1. 深度优先搜索(DFS,Depth First Search)
2. 广度优先搜索(BFS,Breadth First Search)
一、深度优先搜索 DFS
DFS 全称是(Depth First Search),中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。DFS 最显著的特征在于其 「递归调用自身」 。同时与 BFS 类似,DFS 会对其访问过的点打上访问标记,在遍历图时跳过已打过标记的点,以确保 「每个点仅访问一次」 。符合以上两条规则的函数,便是广义上的 DFS。
算法思想
(1)、从顶点出发, 访问, 标记。
(2)、若顶点v1的第1个邻接点没访问过,深度遍历此邻接点;
(3)、若当前邻接点已访问过,再找v1的第2个邻接点重新遍历。
广度优先搜索 BFS BFS 全称是 [Breadth First Search] 中文名是宽度优先搜索,也叫广度优先搜索。是图上最基础、最重要的搜索算法之一。
简单归纳:
1) 在访问了起始点v之后,依次访问v的邻接点;
2) 然后再依次访问这些顶点中未被访问过的邻接点;
3) 直到所有顶点都被访问过为止。
广度优先搜索是一种分层的搜索过程,每向前走一步可能访问一批顶点,不像深度优先搜索 那样有回退的情况。因此,广度优先搜索不是一个递归的过程,其算法也不是递归的。