图的遍历:和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中所有顶点各作一次访问。若给定的图是连通图,则从图中任一顶点出发顺着边可以访问到该图的所有顶点。然而,图的遍历比树的遍历要复杂的多,这是啥因为图中任一顶点都可能和其余顶点想邻接,故在访问了某个顶点之后,可能顺着某条回路回到了该顶点。为了避免重复访问同一个顶点,必须记住每个顶点是否被访问过。因此,可设置一个标记以避免被访问的结点被重读访问,除此之外,遍历图还要考虑俩个问题:一是指定遍历的首个访问顶点;二是要在多个邻接顶点之间约定一种访问次序。
图的深度优先遍历的原理:深度优先搜索遍历类似于树的前序遍历。假设给定图G的初态是所有顶点未曾访问过的,在G中任选一顶点vi为初始出发点,则深度优先搜索可定义如下:首先,访问出发点vi,并将其标记为已访问过,然后,依次从vi出发搜索vi的每一个邻接点vi,若未曾访问过,则以vi的新的出发点继续进行深度优先搜索。 对图进行深度优先搜索遍历时,按访问顶点的先后次序所得到的顶点序列,称为该图的深度优先搜索遍历序列。一个图的DFS序列不一定唯一,它与算法、图的存储所得到的DFS序列也不唯一,它取决于邻接表表示中边表结点的链接次序。
实现与储存结构无关的深度优先遍历:
1.声明实现图遍历操作的抽象图类