给出一个图G和其中任意一个顶点V0,从V0出发系统的访问G中所有的顶点,每个顶点访问一次,这叫图的遍历。
深度优先搜索(depth-first search)简称DFS
基本思想
- 访问一个顶点V,然后访问该顶点邻接到的未被访问过的顶点V’
- 再从V’出发递归地按照深度优先的方式遍历;
- 当遇到一个所有邻接于它多的顶点都被访问过了的顶点U时,则回到已访问顶点序列中最后一个未被访问的相邻顶点的顶点W;
- 在从W出发递归地按照深度优先的方式遍历
- 最后,当任何已被访问过的顶点都未被访问的相邻顶点时,则遍历结束。
深度优先搜索时间复杂度 - 对于具有n个顶点和e条边的无向图或有向图,深度优先搜索算法对图中每一个顶点至多调用一次DFS函数
- 用邻接矩阵表示图时,共需检查n2个矩阵元素,所需时间为O(n2)
- 用邻接表表示图时,找邻接点需将邻接表中所有边结点检查一遍,需要时间O(e),对应的深度优先搜索算法时间复杂度为O(n+e)。
深度优先搜索(breadth-first search)简称BFS
基本思想
-
访问顶点V0
-
然后访问顶点V0邻接到的所有未被访问的顶点V1,V2,…,Vi
-
再依次访问V1,V2,…,Vi邻接道德所有未被访问的顶点
-
如此进行下去,直到访问遍所有顶点
广度优先搜索时间复杂度 -
对于具有n个顶点和e条边的有向图或无向图,广度优先搜索算法对图中每个顶点至多调用一次BFS函数
-
用邻接矩阵表示图时共需检查n2个矩阵所需时间为O(n2)
-
用邻接表表示图时,找邻接点需将邻接表中所有边结点检查一遍,需要时间O(e),对应的广度优先搜索算法的时间复杂度为O(n+e)。
来源:https://blog.csdn.net/lu_long/article/details/102560006