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

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

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

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

DFS

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

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

【图论】图的遍历

由此,上图中顶点的一种访问序列为:v1v2v4v8v5v3v6v7v_1\to v_2\to v_4\to v_8\to v_5\to v_3\to v_6\to v_7.

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

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

BFS

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

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

由此,前面图中顶点的一种访问序列为:v1v2v3v4v5v5v7v8v_1\to v_2\to v_3\to v_4\to v_5\to v_5\to v_7\to v_8.

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

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

相关文章: