【图论】图的遍历

本文为图论的学习总结,讲解图的遍历。

我们希望从图中某一顶点出发访问其余顶点,使每个顶点仅被访问一次,这一过程称为图的遍历。图的遍历算法是图的连通性问题、拓扑排序和求关键路径等算法的基础。

本质:通过边或弧找邻接点的过程。

通常有 2 种遍历图的算法:深度优先搜索(DFS)广度优先搜索(BFS)

DFS

深度优先搜索类似于树的先序遍历

从图中某个顶点 v v v 出发,访问此顶点,然后依次从 v v v 的未被访问的邻接点出发深度优先遍历图,直到图中所有和 v v v 有路径相通顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作为起始点,重复上述过程,直到图中所有顶点都被访问到为止。

在这里插入图片描述

由此,上图中顶点的一种访问序列为: v 1 → v 2 → v 4 → v 8 → v 5 → v 3 → v 6 → v 7 v_1\to v_2\to v_4\to v_8\to v_5\to v_3\to v_6\to v_7 v1v2v4v8v5v3v6v7.

如果该图为连通图,则只需进行一次深度优先搜索.

编程中常用递归实现,附设访问数组 visited。算法复杂度为 O ( n + e ) O(n+e) O(n+e).

BFS

广度优先搜索类似于树的层序遍历

v v v 为起始点,由近至远,依次访问和 v v v 有路径相通且路径长度为 1 , 2 , … 1,2,… 1,2, 的顶点。

由此,前面图中顶点的一种访问序列为: v 1 → v 2 → v 3 → v 4 → v 5 → v 5 → v 7 → v 8 v_1\to v_2\to v_3\to v_4\to v_5\to v_5\to v_7\to v_8 v1v2v3v4v5v5v7v8.

编程中常用队列实现,附设访问数组 visited。算法复杂度为 O ( n + e ) O(n+e) O(n+e).

有帮助的话点个赞加关注吧

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/108195842