数据结构 - 图(遍历)

2020-10-03  本文已影响0人  Whyn

图的遍历和树的遍历类似,我们希望 从图中某一顶点出发,遍历图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph)

树常用的遍历方式有四种方案:前序遍历,中序遍历、后序遍历和层序遍历。但是无论是采用哪种遍历方式,它都有一个明确的起点位置,即根结点,且所有的子结点都只有一个双亲结点,这种遍历的路径很明确。

而对于图的遍历,由于图中所有顶点地位相等,因此可以从任意一个顶点开始进行遍历,更加致命的是,图中顶点间的关系错综复杂,每几个顶点之间就可能形成一个环,这样有可能导致图的遍历存在死循环,无法遍历到其他顶点。所以通常需要额外提供一个访问数组visited[n]来对遍历过程中已遍历的顶点进行一个标记,避免重复访问。visited[n]数组中,n是图中顶点个数,初始值为0(或false),表示顶点未访问,当遍历访问该顶点后,就将其设置为1(或true),作为顶点已访问标记。

图的遍历通常有两种方案:深度优先遍历广度优先遍历

深度优先遍历与广度优先遍历算法在时间复杂度上是一样的,不同之处仅仅在于对顶点访问的顺序不同。

深度优先遍历可以认为是纵向遍历图,而广度优先遍历则是横向进行遍历。

深度优先和广度优先两者并无优劣之分,应依据不同的情况酌情选择:

参考

上一篇下一篇

猜你喜欢

热点阅读